两个有序链表的合并
题目:
代码:
合并后的链表有重复数据:
#include <iostream>
using namespace std;
typedef struct LNode{
int val;
struct LNode *next;
}LNode,*LinkList;
void create(LinkList &L,int n){
L=new LNode;
L->next=NULL;
LNode *r=L;
for(int i=0;i<n;i++){
LNode *p=new LNode;
cin>>p->val;
p->next=NULL;
r->next=p;
r=p;
}
}
void unionLink(LinkList La,LinkList Lb,LinkList &Lc){
Lc=new LNode;
Lc->next=NULL;
LNode *pa=La->next;
LNode *pb=Lb->next;
LNode *pc=Lc;
while(pa && pb){
if(pa->val<=pb->val){
pc->next=pa;
pc=pa;
pa=pa->next;
}else{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next=pa?pa:pb;
}
int main(){
LinkList La,Lb,Lc;
int n1,n2; //La,Lb的大小
cin>>n1>>n2;
create(La,n1);
create(Lb,n2);
unionLink(La,Lb,Lc);
Lc=Lc->next;
cout<<endl<<"Lc:";
while(Lc){
cout<<Lc->val<<" ";
Lc=Lc->next;
}
return 0;
}
合并后的链表无重复数据:
#include <iostream>
using namespace std;
typedef struct LNode{
int val;
struct LNode *next;
}LNode,*LinkList;
void create(LinkList &L,int n){
L=new LNode;
L->next=NULL;
LNode *r=L;
for(int i=0;i<n;i++){
LNode *p=new LNode;
cin>>p->val;
p->next=NULL;
r->next=p;
r=p;
}
}
void unionLink(LinkList La,LinkList Lb,LinkList &Lc){
Lc=new LNode;
Lc->next=NULL;
LNode *pa=La->next;
LNode *pb=Lb->next;
LNode *pc=Lc;
while(pa && pb){
if(pa->val<pb->val){
pc->next=pa;
pc=pa;
pa=pa->next;
}else if(pa->val == pb->val){
pc->next=pa;
pc=pa;
pa=pa->next;
pb=pb->next;
}else{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next=pa?pa:pb;
}
int main(){
LinkList La,Lb,Lc;
int n1,n2; //La,Lb的大小
cin>>n1>>n2;
create(La,n1);
create(Lb,n2);
unionLink(La,Lb,Lc);
Lc=Lc->next;
cout<<endl<<"Lc:";
while(Lc){
cout<<Lc->val<<" ";
Lc=Lc->next;
}
return 0;
}