#include<iostream>
using namespace std;
typedef struct LNode
{
int data;
struct LNode* next;
};
void CreateList(LNode* & mylist)
{
LNode* p, *q;
mylist = (LNode*)malloc(sizeof(LNode));
mylist->next = NULL;//创建头结点
p = mylist;
while (1)
{
q = (LNode*)malloc(sizeof(LNode));
q->next = NULL;
cin >> q->data;
if (q->data < 0)
break;
p->next = q;
p = q;
}
}
void Print(LNode* mylist)
{
LNode* p=NULL;
if(mylist!=NULL)
p = mylist->next;//跳过头结点
while (p)
{
cout<<p->data<<'\t';
p = p->next;
}
}
LNode* MergeList(LNode*link1, LNode* link2)
{
LNode* p, *q, *temp;
p = link1->next;
q = link2->next;
link1->next =NULL;
while (p&&q)//采用头插法,先插入较小的数,后插入较大的数,这样一来就是从大到小依次排列了
{
if (p->data <= q->data)
{
temp = p->next;
p->next =link1->next;
link1->next = p;
p = temp;//这四句尤其容易出错,注意顺序和插入位置
}
else
{
temp = q->next;
q->next = link1->next;
link1->next = q;
q= temp;
}
}
while (p)
{
temp = p->next;
p->next = link1->next;
link1->next = p;
p = temp;
}
while(q)
{
temp = q->next;
q->next = link1->next;
link1->next = q;
q = temp;
}
free(link2);
return link1;
}
int main()
{
LNode* A, *B, *mylist;
mylist= NULL;
CreateList(A);
CreateList(B);
mylist=MergeList(A, B);
Print(mylist);
return 0;
}
链表:实现两个有序且非单调递减链表合并成一个非递增有序单链表(不能增加新结点)
最新推荐文章于 2022-12-06 11:24:47 发布