运行结果:
代码:
#include <iostream>
using namespace std;
struct StNode
{
int data;
struct StNode* next;
};
//创建节点
StNode* CreateNode(int d)
{
StNode* node = new StNode;
node->data = d;
node->next = 0;
return node;
}
//创建链表
StNode* CreateList()
{
StNode* head,*p,*t;
head = 0;
p = head;
t = head;
int data;
int n;
cin >> n;
for(int i=0;i<n;i++)
{
cin >> data;
t = CreateNode(data);
if(head ==0)
{
head = t;
p = head;
}
else
{
p->next = t;
p = t;
}
}
return head;
}
//打印链表
void Display(StNode* head)
{
//cout << "打印链表:" << endl;
while(head)
{
cout << head->data << " ";
head = head->next;
}
cout << endl;
}
//合并链表
StNode* Merge(StNode* h1,StNode* h2)
{
StNode* list1 = h1;
StNode* list2 = h2;
//合并为递增序列
StNode* head = 0;
StNode* tmp = 0;
StNode* pps = 0;
//这里比较两个链表的第一个元素,用较小的作为新链表的头,并把链表节点后移一个(意味着值小的节点已经从从链表中删除)
if(list1->data <= list2->data)
{
head = list1;
list1 = list1->next;
}else
{
head = list2;
list2 = list2->next;
}
pps = head;
//比较两个链表的元素,将其中的较小值插入新链表中,让后将改节点从原链表中删除(节点头后移就相当于把原头节点从链表中删除了,因为链表是从小到大排序的)
while(list1 && list2 )
{
if(list1->data <= list2->data)
{
pps->next = list1;
pps = list1;
list1 = list1->next;
}else
{
pps->next = list2;
pps = list2;
list2 = list2->next;
}
}
//如果list2已经没有元素(也就是所有元素都已经插入新链表),那么就把list1中的元素拼接到新链表中
while(list1)
{
pps->next = list1;
pps = list1;
list1 = list1->next;
}
//如果list1已经没有元素(也就是所有元素都已经插入新链表),那么就把list2中的元素拼接到新链表中
while(list2)
{
pps->next = list2;
pps = list2;
list2 = list2->next;
}
pps->next = 0;
return head;
}
int main()
{
//cout << "创建非递减链表1:" << endl;
StNode* list1 = CreateList();
//cout << "创建非递减链表2:" << endl;
StNode* list2 = CreateList();
//合并
StNode* hh = Merge(list1,list2);
//打印链表
Display(hh);
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!