本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。
输入样例:
3
1 3 5
5
2 4 6 8 10
输出样例:
1 2 3 4 5 6 8 10
NULL
NULL
#include "head.h"
//合并有序链表
typedef int ElementType;
struct Node
{
ElementType Data;
Node *Next;
};
struct Node *Read(); /* 细节在此不表 */
void Print(struct Node *L); /* 细节在此不表;空链表将输出NULL */
struct Node *Merge(struct Node *L1, struct Node *L2);
int main()
{
struct Node *L1;
struct Node *L2;
struct Node *L;
L1 = Read();
L2 = Read();
L = Merge(L1, L2);
Print(L);
Print(L1);
Print(L2);
delete L1,L2,L;
return 0;
}
void Print(struct Node *L)
{
if (L->Next == NULL)
{
cout << "NULL"<<endl;
}
else if (L->Next != NULL)
{
struct Node *p = L->Next;
while (p != NULL)
{
cout << p->Data << " ";
p = p->Next;
}
cout << endl;
}
}
struct Node *Read()
{
struct Node *head = new struct Node;
head->Next = NULL;
struct Node *pre;
pre = head;
int n;
cout << "input how many U want to creat:";
cin >> n;
for (int i = 0; i < n; i++)
{
struct Node *pnew = new struct Node;
while (pre->Next != NULL)
pre = pre->Next;
cin >> pnew->Data;
pre->Next = pnew;
pnew->Next = NULL;
pre = pnew;
}
return head;
}
struct Node *Merge(struct Node *L1, struct Node *L2)
{
if (L1 == NULL || L2 == NULL)
return NULL;
struct Node *L = new struct Node;
L->Next = NULL;
struct Node *p = L;
struct Node *p1 = L1->Next;
struct Node *p2 = L2->Next;
//归并排序
while (p1 != NULL && p2 != NULL)
{
if (p1->Data > p2->Data)
{
p->Next = p2;
p2 = p2->Next;
p = p->Next;
}
else
{
p->Next = p1;
p1 = p1->Next;
p = p->Next;
}
}
if (p1 != NULL)
p->Next = p1;
if (p2 != NULL)
p->Next = p2;
L1->Next = NULL;
L2->Next = NULL;
return L;
}