合并两个排序的链表
题目:
输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例:
输入:{1,3,5},{2,4,6}
返回值:{1,2,3,4,5,6}
输入:{},{}
返回值:{}
输入:{-1,2,4},{1,3,4}
返回值:{-1,1,2,3,4,4}
解题思路:
采用递归法对两个链表的节点进行比较,将小的头节点取出,并将其添加到新的链表后面,剩下的部分再进行比较,重复上述过程,直到两个链表为空。
代码示例:
```/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
/**
*
* @param pHead1 ListNode类
* @param pHead2 ListNode类
* @return ListNode类
*/
struct ListNode* Merge(struct ListNode* pHead1, struct ListNode* pHead2 ) {
// write code here
if(pHead1 == NULL)
return pHead2;
if(pHead2 == NULL)
return pHead1;
struct ListNode *phead = NULL;
if(pHead1->val < pHead2->val){
phead = pHead1;
phead->next = Merge(pHead1->next, pHead2);
}else{
phead = pHead2;
phead->next = Merge(pHead1, pHead2->next);
}
return phead;
}