首页 > 代码库 > 合并两个有序单链表的操作

合并两个有序单链表的操作

/*
以合并两个2个长度均为n的递增单链表为例

演示连个单链表的合并操作
*/

#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<stdio.h>
#include<queue>
#include<math.h>
#define INF 0x3f3f3f3f
#define MAX 1000005
#define Temp 1000000000

using namespace std;

int n;

typedef struct node
{
struct node *next;
int date;
}node,*LinkList;

void MerList(LinkList &Lc,LinkList &La,LinkList &Lb)//合并两个单链表
{
LinkList pa,pb,pc;
pa=La->next;
pb=Lb->next;
Lc=pc=La;
while(pa && pb)
{
if(pa->date < pb->date)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next = pa?pa:pb;
}

void Get_LinkList(LinkList &L)//尾插法建立单链表
{
node *r,*s;
int date;
L=(LinkList)malloc(sizeof(node));
r=L;
for(int i=1;i<=n;i++)
{
scanf("%d",&date);
s=(LinkList)malloc(sizeof(node));
s->date=date;
r->next=s;
r=s;
}
r->next=NULL;
}

void Print(LinkList &Lc)//打印单链表
{
node *p=Lc->next;
while(p)
{
printf("%d\n",p->date);
p=p->next;
}
}

int main()
{
node *La,*Lb,*Lc;
while(scanf("%d",&n)!=EOF)
{
Get_LinkList(La);
Get_LinkList(Lb);

Lc=(LinkList)malloc(sizeof(node));
MerList(Lc,La,Lb);

Print(Lc);
}
return 0;
}

合并两个有序单链表的操作