首页 > 编程语言 > 详细

两个带有头节点的单链表链表1和链表2,单调递增有序,编写函数求两个链表中的相交部分,调整删除链表1中,并成为一个递减有序的单链表,给出算法思想和相应代码。

时间:2021-08-01 13:08:00      阅读:20      评论:0      收藏:0      [点我收藏+]

算法思想:

  在链表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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!