题目:输入两个递增有序的链表,合并这两个链表后,使新链表中的结点 也是递增有序的。
//递归方式实现两个有序链表的合并
struct ListNode
{
int _value;
ListNode* _next;
ListNode(int value)
:_value(value)
{}
};
ListNode* merge(ListNode* phead1, ListNode* phead2)
{
//如果两个链表有一个为空,合并后的链表则为另一个链表
if (phead1 == NULL)
{
return phead2;
}
else if (phead2 == NULL)
{
return phead1;
}
ListNode* mergeHead = NULL;
//链表1的值小于链表2的值
if (phead1->_value<phead2->_value)
{
mergeHead = phead1;
mergeHead->_next = merge(phead1->_next,phead2);
}
else
{
mergeHead = phead2;
mergeHead->_next = merge(phead1, phead2->_next);
}
return mergeHead;
}
//打印及测试代码
void Print(ListNode* head)
{
while (head)
{
cout << head->_value << "->";
head = head->_next;
}
cout << "\n";
}
void test()
{
typedef ListNode Node;
//创建链表1
Node* phead1;
Node* n1 = new Node(1);
Node* n2 = new Node(2);
Node* n3 = new Node(4);
Node* n4 = new Node(6);
Node* n5 = new Node(7);
phead1 = n1;
n1->_next = n2;
n2->_next = n3;
n3->_next = n4;
n4->_next = n5;
n5->_next = NULL;
//创建链表2
Node* phead2;
Node* n6 = new Node(3);
Node* n7 = new Node(5);
Node* n8 = new Node(8);
Node* n9 = new Node(9);
Node* n10 = new Node(10);
phead2 = n6;
n6->_next = n7;
n7->_next = n8;
n8->_next = n9;
n9->_next = n10;
n10->_next = NULL;
Node* ret = merge(phead1,phead2);
Print(ret);
}