c语言如何实现两个单链表的交叉合并方式

这篇文章主要介绍c语言如何实现两个单链表的交叉合并方式,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

如下所示:

c语言如何实现两个单链表的交叉合并方式

#include<stdio.h>
#include<stdlib.h>
#include<iostream>

usingnamespacestd;

structNode
{
intdata;
Node*next;
};

//初始化
Node*init()
{
Node*head=newNode;
head->next=NULL;
returnhead;
}

//头插法创建节点
voidinsetList(Node*head,inti)
{
Node*cur=newNode;

cur->data=i;

cur->next=head->next;
head->next=cur;
}

//链表A,B生成
voidCreateList(Node*head_A,Node*head_B)
{
for(inti=0;i<20;i++)
{
insetList(head_A,i);
i++;
insetList(head_B,i);
}
//增加链表B的长度
insetList(head_B,20);
insetList(head_B,25);
}

voidLinklist(Node*head_A,Node*head_B,Node*List_C)
{
Node*pa=head_A->next;//pa指向链表A的首元节点
Node*pb=head_B->next;//pa指向链表B的首元节点
Node*pc=List_C;//pc指向C的头节点

while(pa&&pb)//某一链表遍历结束即退出
{
pc->next=pa;//先存A链表的节点
pc=pa;//pc指向pa,pc前进一个节点
pa=pa->next;//pa前进一个节点

pc->next=pb;//存B链表的节点
pc=pb;
pb=pb->next;
}

//判断谁先结束,然后把没结束的剩余结点的链接上
pc->next=pa?pa:pb;

deletehead_B;//释放链表B
}

//打印链表
voidprint(Node*head)
{
Node*temp=head->next;//防止头指针移动
while(temp)
{
cout<<temp->data<<"";
temp=temp->next;
}
}
voidmain()
{
Node*head_A=init();//链表A
Node*head_B=init();//链表B
Node*List_C=head_A;//链表C

//创建链表A,B
CreateList(head_A,head_B);

//打印链表
cout<<"链表A为:";
print(head_A);
cout<<endl<<"链表B为:";
print(head_B);

//合并链表A,B生成链表C
Linklist(head_A,head_B,List_C);
cout<<endl<<"链表C为:"<<endl;
print(List_C);

system("pause");

}

以上是“c语言如何实现两个单链表的交叉合并方式”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注恰卡编程网行业资讯频道!

发布于 2021-05-30 14:07:27
收藏
分享
海报
0 条评论
176
上一篇:2048小游戏怎么使用C语言实现 下一篇:C语言如何实现仓库物资管理系统
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码