本文主要是介绍c++ 合并两个无序的单链表使其仍为无序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
#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;
}
与上一篇一样 还是将单链表插入到了其中一个链表的尾部 这两个对于无序顺序表与无序单链表的合并的方法是一样的
这篇关于c++ 合并两个无序的单链表使其仍为无序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!