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

Posted 声声醉如兰

tags:

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

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

以上是关于合并两个有序单链表的操作的主要内容,如果未能解决你的问题,请参考以下文章

数据结构(C语言版)严蔚敏->单链表的定义及合并两个有序单链表

集合操作 用单链表模拟有序集合,实现集合的加入一个元素、删除一个元素、集合的交、并、差运算。

两个有序单链表的合并

实用数据结构:怎样把两个单链表A B(本身都是有序表)合并为C并且C为有序表

算法总结之 合并两个有序的单链表

栈和队列----合并两个有序的单链表