剑指offer-合并两个排序的链表
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
解题思路
利用递归的思想,分别从两个链表的头节点开始,比较各自的值,并让新链表的头指针指向值较小的那个头结点。然后把值小的那个链表的头结点抽出,合并两个新链表并让头节点的next指针指向它。若碰到两个链表中的一个为NULL,则返回另一个链表为合并链表。
代码
1 /* 2 struct ListNode { 3 int val; 4 struct ListNode *next; 5 ListNode(int x) : 6 val(x), next(NULL) { 7 } 8 };*/ 9 class Solution { 10 public: 11 ListNode* Merge(ListNode* pHead1, ListNode* pHead2) 12 { 13 if(pHead1 == NULL) 14 return pHead2; 15 if(pHead2 == NULL) 16 return pHead1; 17 ListNode* pHead = NULL; 18 if(pHead1->val >= pHead2->val){ 19 pHead = pHead2; 20 pHead->next = Merge(pHead1, pHead2->next); 21 } 22 else{ 23 pHead = pHead1; 24 pHead->next = Merge(pHead1->next, pHead2); 25 } 26 return pHead; 27 } 28 };