成为更好的自己,加油加油加油!
单链表的合并是数据结构教材第二章单链表的内容,本知识点的需求首先是掌握单链表的创建与链表指针的运用,如有同学不懂正序逆序单链表的创建,可以先查看我创作的一个博客是讲解相关知识点的。网址赋上:
正逆序位单链表的建立
了解之后相信大家就能很快的掌握单链表的合并知识了。
单链表的合并完整代码如下:
//单链表下的正序双表合并
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void InitList(LinkList &L); //将单链表初始化,建立头结点
void CreateList(LinkList &L,int num); //设置单链表中的元素
void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc); //合并La与Lb单链表
void PrintList(LinkList L); //打印单链表元素
void InitList(LinkList &L)
{
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
}
void CreateList(LinkList &L,int num) //正序创建单链表
{
LinkList p,q;
p=q=(LinkList)malloc(sizeof(LNode));
p=L;
while(num>0)
{
scanf("%d",&q->data);
p->next=q;
p=q;
q=(LinkList)malloc(sizeof(LNode));
num--;
}
p->next=NULL;
}
void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc)
{
LinkList pa,pb,pc;
pa=La->next,pb=Lb->next;
pc=Lc;
while(pa&&pb)
{
if(pa->data<pb->data)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next=pa?pa:pb; //对比较后的链表进行判断,直接把pc的下一个结点地址指向还有元素的链表。
}
void PrintList(LinkList L)
{
LinkList p;
p=L->next;
while(p)
{
printf("%2d",p->data);
p=p->next;
}
}
int main()
{
LinkList La,Lb,Lc;
int na,nb;
InitList(La);
InitList(Lb);
InitList(Lc);
printf("请输入单链表La中的元素个数:");
scanf("%d",&na);
CreateList(La,na);
printf("\n请输入单链表Lb中的元素个数:");
scanf("%d",&nb);
CreateList(Lb,nb);
printf("\n单链表La的元素如下:");
PrintList(La);
printf("\n单链表Lb的元素如下:");
PrintList(Lb);
printf("\n由La与Lb合并后的单链表Lc元素为:");
MergeList_L(La,Lb,Lc);
PrintList(Lc);
return 0;
}
执行结果: