/*将两个有序链表合并使其依然有序
*
*/
# include <iostream>
using namespace std;
//定义Node为链表的节点
struct Node
{
int data;
Node* next;
};
//头插法
Node* Insert(int n,Node*& head){
auto p = new Node;
p->data = n;
if (head == NULL){
p->next = NULL;
}
else {
p->next = head;
}
head = p;
}
//递归法合并链表
Node* Merge(Node* head1, Node* head2)
{
Node *head = NULL;
if ( head1 == NULL )
return head2;
if ( head2 == NULL)
return head1;
if (head1->data < head2->data) //欲合并链表要和生成链表的排序方法一直,即原链表从小到大合并链表也应该从小到大排序
{
head = head1;
head->next = Merge(head1->next,head2);
} else {
head = head2;
head->next = Merge(head1,head2->next);
}
return head;
}
//显示链表
void show(Node*& head)
{
auto p = head;
while (p != NULL) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
int main()
{
struct Node* head1 = NULL;
struct Node* head2 = NULL;
Insert (9,head1);
Insert (7,head1);
Insert (5,head1);
Insert (3,head1);
Insert (1,head1);
cout << "链表1 : " << endl;
show(head1);
Insert (14,head2);
Insert (12,head2);
Insert (10,head2);
Insert (9,head2);
Insert (8,head2);
cout << "链表2 : " << endl;
show(head2);
Node* head3 = Merge(head1,head2);
cout << "合并后的链表 : " << endl;
show(head3);
}
*
*/
# include <iostream>
using namespace std;
//定义Node为链表的节点
struct Node
{
int data;
Node* next;
};
//头插法
Node* Insert(int n,Node*& head){
auto p = new Node;
p->data = n;
if (head == NULL){
p->next = NULL;
}
else {
p->next = head;
}
head = p;
}
//递归法合并链表
Node* Merge(Node* head1, Node* head2)
{
Node *head = NULL;
if ( head1 == NULL )
return head2;
if ( head2 == NULL)
return head1;
if (head1->data < head2->data) //欲合并链表要和生成链表的排序方法一直,即原链表从小到大合并链表也应该从小到大排序
{
head = head1;
head->next = Merge(head1->next,head2);
} else {
head = head2;
head->next = Merge(head1,head2->next);
}
return head;
}
//显示链表
void show(Node*& head)
{
auto p = head;
while (p != NULL) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
int main()
{
struct Node* head1 = NULL;
struct Node* head2 = NULL;
Insert (9,head1);
Insert (7,head1);
Insert (5,head1);
Insert (3,head1);
Insert (1,head1);
cout << "链表1 : " << endl;
show(head1);
Insert (14,head2);
Insert (12,head2);
Insert (10,head2);
Insert (9,head2);
Insert (8,head2);
cout << "链表2 : " << endl;
show(head2);
Node* head3 = Merge(head1,head2);
cout << "合并后的链表 : " << endl;
show(head3);
}