题目:合并两个递增的单链表,使合并后的新链表中的节点依然是按照递增排序的。链表结点定义如下:
struct ListNode
{
int val;
ListNode next;
};
分析:我们从链表头结点开始分析,如果链表1头结点的值小于链表2头结点的值,那么链表1的头结点就是合并后新链表的头结点。
我们继续合并两个链表中剩余的结点,依旧是比较两个链表头结点的值,找出小的那个连接到合并后新链表的尾部。
我们发现合并的步骤都是一样的,所以这是一个递归的过程。
注意:我们要注意链表为空时的处理方式,如果一个链表为空,那它和另一个链表合并之后的结果就是另外那个链表。如果两个链表都是空链表,那么合并后依旧是空链表。
过程用图表示:
最后附上代码:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2){
if(pHead1 == NULL)
return pHead2;
if(pHead2 == NULL)
return pHead1;
ListNode* MergeNode = NULL;
if(pHead1->val < pHead2->val){
MergeNode = pHead1;
MergeNode->next = Merge(pHead1->next, pHead2);
}
else{
MergeNode = pHead2;
MergeNode->next = Merge(pHead1, pHead2->next);
}
return MergeNode;
}