c++ 合并两个无序的单链表使其仍为无序

本文介绍了一种将两个无序单链表通过尾插法合并为一个链表的方法,并提供了完整的C++代码实现。该方法确保了合并后的链表依然保持无序状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include "stdafx.h"
#include<iostream>

using namespace std;

struct LinkNode
{
int data;
LinkNode *next;
};


int InitList_L(LinkNode *&L)
{//链表初始化
L=new LinkNode;//向操作系统要空间
if(0==L) return 0;
L->next=0;
return 1;
}

void print(LinkNode *L)
{//从前到后打印链表中元素
LinkNode *p;
p=L->next;
while(p!=0)
{
cout<<p->data<<"  ";
p=p->next;
}
}

void push_back(LinkNode *&L,int x)
{//尾插法,在链表的尾部插入元素
LinkNode *p,*q;
p=new LinkNode;
p->data=x;
p->next=0;
q=L;
while(q->next!=0)
{
q=q->next;
}
q->next=p;
}

void UnionAB_1(LinkNode *&A,LinkNode *B)
{//AB带头结点的无序单链表,归并到C中使其仍然无序
int e;
LinkNode *p,*q;
p=A;
q=B;
while(q->next!=0)
{
e=q->next->data;//用e来记录链表B中当前的元素
while(p->next!=0&&p->next->data!=e) p=p->next;//在链表A中依次查找有木有与e相同的元素
if(p->next==0)//如果到链表A的尾部还未找到
push_back(A,e);//将e插入到链表A的尾部
q=q->next;
}
print(A);
cout<<endl;
}

int main(int argc, char* argv[])
{
LinkNode *LA,*LB;//定义一个LinkNode类型的指针变量
InitList_L(LA);//初始化
InitList_L(LB);
push_back(LA,5);
push_back(LA,1);
push_back(LB,4);
push_back(LB,3);
push_back(LB,5);
print(LA);//打印链表LA的元素
cout<<endl;

print(LB);//打印链表LB的元素
cout<<endl;

UnionAB_1(LA,LB);//合并
return 0;
}

与上一篇一样 还是将单链表插入到了其中一个链表的尾部 这两个对于无序顺序表与无序单链表的合并的方法是一样的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值