首页 > 代码库 > 合并两个有序单链表的操作
合并两个有序单链表的操作
/*
以合并两个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;
}
合并两个有序单链表的操作