c语言实现两个单链表的交叉合并方式
如下所示:
#include#include #include 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< 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< 总结:链表的遍历注意不要随意改变头指针的位置,进行合并时需要声明三个结构体指针用于进行合并,注意某一链表结束时需要进行链接,再释放生成的链表.
以上这篇c语言实现两个单链表的交叉合并方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。