设有两个按元素递增有序的单链表A和B,编一程序将A和B表归并成一个新的递增有序的单链表C,不使用额外空间。
-
#include<iostream>
-
usingnamespacestd;
-
-
structNode{
-
intm_Data;
-
Node*m_pNext;
-
};
-
-
Node*mergeLists(Node*pListA,Node*pListB)
-
{
-
if(pListA==NULL){
-
returnpListB;
-
}
-
elseif(pListB==NULL){
-
returnpListA;
-
}
-
else{
-
Node*pHead=NULL;
-
if(pListA->m_Data<pListB->m_Data){
-
pHead=pListA;
-
pListA=pListA->m_pNext;
-
}
-
else{
-
pHead=pListB;
-
pListB=pListB->m_pNext;
-
}
-
-
Node*pNode=pHead;
-
while(pListA&&pListB){
-
if(pListA->m_Data<pListB->m_Data){
-
pNode->m_pNext=pListA;
-
pListA=pListA->m_pNext;
-
}
-
else{
-
pNode->m_pNext=pListB;
-
pListB=pListB->m_pNext;
-
}
-
pNode=pNode->m_pNext;
-
}
-
-
if(pListA){
-
while(pListA){
-
pNode->m_pNext=pListA;
-
pListA=pListA->m_pNext;
-
pNode=pNode->m_pNext;
-
}
-
}
-
elseif(pListB){
-
while(pListB){
-
pNode->m_pNext=pListB;
-
pListB=pListB->m_pNext;
-
pNode=pNode->m_pNext;
-
}
-
}
-
-
returnpHead;
-
}
-
}
-
-
voidprintList(Node*pHead)
-
{
-
boolbEmpty=true;
-
-
while(pHead){
-
bEmpty=false;
-
cout<<pHead->m_Data<<"->";
-
pHead=pHead->m_pNext;
-
}
-
-
if(!bEmpty){
-
cout<<"NULL"<<endl;
-
}
-
}
-
-
intmain()
-
{
-
NodenodeA5={4,NULL};
-
NodenodeA4={4,&nodeA5};
-
NodenodeA3={3,&nodeA4};
-
NodenodeA2={1,&nodeA3};
-
NodenodeA1={1,&nodeA2};
-
NodenodeA0={0,&nodeA1};
-
Node*pHeadA=&nodeA0;
-
-
NodenodeB5={5,NULL};
-
NodenodeB4={4,&nodeB5};
-
NodenodeB3={3,&nodeB4};
-
NodenodeB2={2,&nodeB3};
-
NodenodeB1={2,&nodeB2};
-
NodenodeB0={1,&nodeB1};
-
Node*pHeadB=&nodeB0;
-
-
cout<<"LinkedListA:"<<endl;
-
printList(pHeadA);
-
-
cout<<"LinkedListB:"<<endl;
-
printList(pHeadA);
-
-
Node*pHead=mergeLists(pHeadA,pHeadB);
-
cout<<"MergedListA+B:"<<endl;
-
printList(pHeadA);
-
}
分享到:
相关推荐
对于两个链表的归并,自己想了好久才做出来的,希望对初学的人有点帮助吧
A,B两个链表,其表中的元素递增有序,把A,B和成一个链表
(1)建立两个链表A和B 链表元素个数分别为m和n个 (2)假设元素分别为 x1 x2 …xm 和 y1 y2 …yn 把它们合并成一个线性表C 使得: 当m> n时 C x1 y1 x2 y2 …xn yn … xm 当n>m时 C y1 x1 y2 x2 …ym xm ...
用c语言写链表归并
1.编写一个基于链表的归并排序程序。 1)随机生成两个链表,利用随机数进行初始化 2)要求给出链表的结构,链表的初始化等排序中用到的基本操作函数 3)显示相关的输出信息 编程环境:Linux C
将两个有序的链表合并为一个有序链表,链表的大小是可变的
用于数据结构中链表的归并操作,可以将连个链表的数据类型的数据合并成一个链表
顺序表和链表的归并排序,运用面向对象的思想,顺序表,链表继承线性表
链表的归并 数据结构 C语言实现
从键盘输入数据,建立两个有序线性表(每个...其中链表实现时,要求利用两个升序链表的结点实现归并,即归并时不能新建结点,归并后原来两个升序链表的存储空间不在存在。 实验目的:掌握两个有序线性表的归并算法。
归并排序的链表实现 随机生成实验数据,可以统计算法运行时间
单链表的创建,排序,归并,插入删除定位和获得元素,计算元素个数,打印链表
有两个链表a和b,设结点中包含学号和姓名。从a链表中删去与b链表中相同学号的结点。
输入数据: 5 12cde 6 stuvwx 输出 xwvutsedc21
实现有序链表的建立;并实现对两个有序链表的归并操作
◎ 实验题目: 合并两个链表 ◎ 实验目的:熟悉顺序表和指针的用法,并能用于具体问题 ◎ 实验内容:将两个链表合并为一个带头结点的有序循环链表
从键盘输入两个链表,通过程序对他们排序,之后按递增顺序合并链表
(1)建立两个链表A和B,链表元素个数分别为m和n个。 (2)假设元素分别为(x1,x2,…xm),和(y1,y2, …yn)。把它们合并成一个线性表C,使得: 当m>=n时,C=x1,y1,x2,y2,…xn,yn,…,xm 当n>m时,C=y1,x1,y2,x2,…ym...
建立新链表储存两旧链表中的元素的交集
已有a、b两个链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,按学号升序排列