算法思想:
在链表1中找到与链表2相交的部分,其余部分删除,再将链表1中的节点用头插法进行逆置。
相应代码:
LinkList SameAB (LinkList &A , LinkList B ){ LNode *p=A->next; LNode *pre=A; LNode *q=B->next; //这里用指针p和q分别指向链表A和B的第一个节点,用指针pre指向链表A的头节点 While(p!=NULL && q!=NULL){ if(p->data < q->data){ pre->next=p->next; free(p); p=pre->next; }//如果p小于q,p向后移,并释放当前p的节点 else if(p->data > q->data){ q=q->next; }//如果q小于p,q向后移 else{ pre=p; p=p->next; q=q->next; }//如果p和q相等,将p留在A中,q向后移 //当B链表扫描完,A链表还有剩余节点时,将A链表中的剩余节点释放掉 While(p!=NULL){ pre-next=p-next; free(p); p=pre->next; } pre=A->next; p=pre->next; A->next=NULL; While(pre!=NULL){ pre->next=A->next; A->next=pre; pre=p; p=p->next; }//将A就地逆置 } return A; }
两个带有头节点的单链表链表1和链表2,单调递增有序,编写函数求两个链表中的相交部分,调整删除链表1中,并成为一个递减有序的单链表,给出算法思想和相应代码。
原文:https://www.cnblogs.com/zw-521/p/15086023.html