将两个已经从小到大排序好的单链表合并为新的链表,要求新的链表中仍然是从小到大有序。
#include <iostream>
using namespace std;
struct Node
{
int data;
Node *next;
};
Node *input();
Node *merge(Node *, Node *);
void output(Node *);
int main()
{
Node *s1 = input();
Node *s2 = input();
Node *s3 = merge(s1, s2);
output(s3);
return 0;
}
Node *input()
{
Node *head = NULL, *tail = NULL;
int x;
cin >> x;
while (x != -1)
{
Node *p = new Node;
p->data = x;
p->next = NULL;
if (head == NULL)
head = tail = p;
else
{
tail->next = p;
tail = p;
}
cin >> x;
}
return head;
}
void output(Node *head)
{
Node *p = new Node;
while (head != NULL)
{
p = head;
head = head->next;
cout << p->data << " ";
}
cout << endl;
}
Node *merge(Node *t1, Node *t2)
{
Node *head = NULL, *tail = NULL;
while (t1 && t2)
{
if (t1->data < t2->data)
{
Node *p = new Node;
p->data = t1->data;
p->next = NULL;
if (head == NULL)
head = tail = p;
else
{
tail->next = p;
tail = p;
}
t1 = t1->next;
}
if (t1)
if (t1->data >= t2->data)
{
Node *p = new Node;
p->data = t2->data;
p->next = NULL;
if (head == NULL)
head = tail = p;
else
{
tail->next = p;
tail = p;
}
t2 = t2->next;
}
}
if (t1)
tail->next = t1;
if (t2)
tail->next = t2;
return head;
}