将两个链表表示的递增整数序列合并为一个非
输入
输入三行,第一行代表两个链表长度,第二三行分别表示两个链表表示的递增序列
输出
输出合并后的序列
样例输入
3 5
1 3 5
2 4 6 8 10
样例输出
1 2 3 4 5 6 8 10
#include <bits/stdc++.h>
using namespace std;
typedef struct Node
{
int data;
Node* next;
}*List;
void InitList(List &list)
{
list=new Node;
list->next=NULL;
}
void DestroyList(List &list)
{
List temp;
while(list!=NULL)
{
temp=list;
list=list->next;
free(temp);
}
}
void AddNode(List &list,int data)
{
List temp=list;
List node=new Node;
node->next=NULL;
node->data=data;
while(temp->next!=NULL)
{
temp=temp->next;
}
temp->next=node;
}
List MergeList(List &listA,List &listB)
{
List listC;
List node=new Node;
listC=node;
listA=listA->next;
listB=listB->next;
while(listA!=NULL&&listB!=NULL)
{
List temp=new Node;
temp->next=NULL;
if(listA->data>listB->data)
{
temp->data=listB->data;
node->next=temp;
node=node->next;
listB=listB->next;
}
else
{
temp->data=listA->data;
node->next=temp;
node=node->next;
listA=listA->next;
}
}
while(listA!=NULL)
{
List temp=new Node;
temp->next=NULL;
temp->data=listA->data;
node->next=temp;
node=node->next;
listA=listA->next;
}
while(listB!=NULL)
{
List temp=new Node;
temp->next=NULL;
temp->data=listB->data;
node->next=temp;
node=node->next;
listB=listB->next;
}
return listC;
}
void PrintList(const List &list)
{
List p=list;
while(p->next!=NULL){
p=p->next;
cout << p->data << " ";
}
cout << endl;
}
int main(){
int m,n;
cin >> m >> n;
List listA, listB;
InitList(listA); // 初始化单链表
InitList(listB); // 初始化单链表
for(int i=0;i<m;i++){
int v;cin >> v;
AddNode(listA,v); // 在单链表的末尾增加节点
}
for(int i=0;i<n;i++){
int v; cin >> v;
AddNode(listB, v);
}
List listC = MergeList(listA,listB); //合并两个单链表
PrintList(listC); // 输出单链表
DestroyList(listA); // 销毁单链表
DestroyList(listB); // 销毁单链表
DestroyList(listC); // 销毁单链表
return 0;
}