题目:输入两个递增排序的链表,合并这两个链表并使得新链表中的结点仍然按照递增排序的
分析:
假设链表1:1->3->5->7链表2:2->4->6->8合并之后的链表应该是1->2->3->4->5->6->7->8
我们首先比较链表1和链表2的头结点的值的大小,值小的结点1作为新链表的头结点,此时链表1:3->5->7,链表2:2->4->6->8。再比较此时两个链表的头结点,值小的结点2与之前合并好的链表的结点链接起来。
测试用例:
功能测试(输入的链表有多个结点,结点的值互不相同或者存在值相等的多个结点)
特殊输入测试(两个链表的一个或者两个头结点为NULL指针,两个链表中只有一个结点)
代码如下:
struct ListNode
{
int m_nValue;
ListNode* m_pNext;
}
ListNode* Merge(ListNode* pHead1,ListNode* pHead2)
{
if(pHead1==NULL )
return pHead2;
else if(pHead2==NULL)
return pHead1;
ListNode* pMergeHead=NULL;
if(pHead1->m_nValue < pHead2->m_nValue)
{
pMergeHead=pHead1;
pMergeHead->m_pNext=Merge(pHead1->m_pNext,pHead2);
}
else if(pHead1->m_nValue > pHead2->m_nValue)
{
pMergeHead=pHead2;
pMergeHead->m_pNext=Merge(pHead1,pHead2->m_pNext);
}
return pMergeHead;
}