上述uml图下载地址:http://download.youkuaiyun.com/detail/bladeandmaster88/9631377
#include <iostream>
using namespace std;
struct Node
{
Node(int x)
{
value = x;
next = 0;
}
int value;
Node *next;
};
Node *Merge(Node *head1, Node *head2)
{
if (head1 == NULL)
return head2;
if (head2 == NULL)
return head1;
Node *head = NULL;//新链表的头节点
//确定新链表的头节点
if (head1->value <= head2->value)
{
head = head1;
head1 = head1->next;
}
else
{
head = head2;
head2 = head2->next;
}
Node *cur = head;//新链表的当前节点
//在两个链表中遍历比较,将值较小的结点链接到pcur结点后
while ( head1 && head2)
{
if (head1->value <= head2->value)
{
cur->next = head1;
cur=head1;
head1 = head1->next;
}
else
{
cur->next = head2;
cur = head2;
head2 = head2->next;
}
}
//将head1或head2剩余的结点链到cur之后,完成整个合并的过程
if (head1 )//对于这个例子,head1为空
cur->next = head1;
if (head2)
cur->next = head2;
return head;
}
int main()
{
Node *p1 = new Node(1);
Node *p2 = new Node(3);
Node *p3 = new Node(5);
Node *p4 = new Node(7);
Node *p5 = new Node(9);
Node *p6 = new Node(11);
p1->next = p2;
p2->next = p3;
p3->next = p4;
p4->next = p5;
p5->next = p6;
Node *q1 = new Node(2);
Node *q2 = new Node(4);
Node *q3 = new Node(6);
Node *q4 = new Node(8);
Node *q5 = new Node(10);
Node *q6 = new Node(12);
q1->next = q2;
q2->next = q3;
q3->next = q4;
q4->next = q5;
q5->next = q6;
Node *ptr =0;
ptr = Merge(p1, q1);
while (ptr)
{
cout<<ptr->value<<" ";
ptr = ptr->next;
}
cout << endl;
return 0;
}