码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-09-23 14:47:28      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

/*
以合并两个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;
}

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

标签:

原文地址:http://www.cnblogs.com/alan-W/p/5899766.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!