链表 | 将递增有序的两个链表的公共元素合并为新的链表

Posted TQCAI

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表 | 将递增有序的两个链表的公共元素合并为新的链表相关的知识,希望对你有一定的参考价值。

王道P38T14

主代码:

LinkList common_subList(LinkList &A,LinkList &B){
    LNode *C=new LNode,*pC=C;
    C->next=NULL;
    LNode* pA=A->next,*pB=B->next;
    while(pA!=NULL && pB!=NULL){
        if(pA->data < pB->data){
            pA=pA->next;
        }else if(pA->data == pB->data){
            pC->next=new LNode;
            pC->next->data=pA->data;
            pC=pC->next;
            pC->next=NULL;
            pA=pA->next;
            pB=pB->next;
        }else{
            pB=pB->next;
        }
    }
    return C;
} 

完整代码:

技术分享图片
#include <cstdio>
#include <stdlib.h>

using namespace std;

typedef struct LNode{
    int data;
    struct LNode* next=NULL; 
    LNode(){    }
    LNode(int x){    
        data=x;
    }
}LNode;

typedef LNode* LinkList;

LinkList  build_list(int * arr,int n){
    int i;
    LinkList L=new LNode;
    LinkList pre=L;
    for(i=0;i<n;i++){
        LinkList p=new LNode(arr[i]);
        pre->next=p;
        pre=p;
    }
    return L;
}

void show_list(LinkList& L){
    LinkList p=L->next;
    while(p){
        printf("%d ",p->data);
        p=p->next;
    }
    puts("");
}

LinkList common_subList(LinkList &A,LinkList &B){
    LNode *C=new LNode,*pC=C;
    C->next=NULL;
    LNode* pA=A->next,*pB=B->next;
    while(pA!=NULL && pB!=NULL){
        if(pA->data < pB->data){
            pA=pA->next;
        }else if(pA->data == pB->data){
            pC->next=new LNode;
            pC->next->data=pA->data;
            pC=pC->next;
            pC->next=NULL;
            pA=pA->next;
            pB=pB->next;
        }else{
            pB=pB->next;
        }
    }
    return C;
} 

int main(){
    int A_arr[5]={1,2,3,5,9};
    int B_arr[5]={0,2,2,6,9};
    LinkList A=build_list(A_arr,5);
    LinkList B=build_list(B_arr,5);
    LinkList C=common_subList(A,B);
    show_list(A);
    show_list(B);    
    show_list(C);
}
 
View Code

注意:

要注意紫色代码处的pC指针滑动。在白纸上编写时我忽略了这步。

 

以上是关于链表 | 将递增有序的两个链表的公共元素合并为新的链表的主要内容,如果未能解决你的问题,请参考以下文章

数据结构 将两个非递减的有序链表合并为一个非递增的有序链表要求结果链表仍使用原来的两个链表的存储空间,不另外占用其它的存储空间。表中允许有重复数据。

Leetcode--合并两个有序链表(21)

两个有序链表的合并

合并两个有序链表【递归、迭代】

21. 合并两个有序链表(C++)

LeetCode 21.合并两个有序链表