合并两个排序的链表
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则
解法1:非递归解法
1 ListNode* Merge(ListNode* pHead1, ListNode* pHead2) 2 { 3 if(pHead1==NULL)return pHead2; 4 if(pHead2==NULL)return pHead1; 5 if(pHead1->val > pHead2->val) 6 { 7 ListNode *tmp=pHead1; 8 pHead1=pHead2; 9 pHead2=tmp; 10 } 11 ListNode *newHead=pHead1; 12 ListNode *pcur=pHead1; 13 pHead1=pHead1->next; 14 while(pHead1 && pHead2) 15 { 16 if(pHead1->val < pHead2->val) 17 { 18 pcur->next=pHead1; 19 pcur=pcur->next; 20 pHead1=pHead1->next; 21 }else{ 22 pcur->next=pHead2; 23 pcur=pcur->next; 24 pHead2=pHead2->next; 25 } 26 } 27 if(pHead1)pcur->next=pHead1; 28 if(pHead2)pcur->next=pHead2; 29 return newHead; 30 }
解法2:递归解法
1 ListNode* Merge(ListNode* pHead1, ListNode* pHead2) 2 { 3 if(pHead1==NULL)return pHead2; 4 if(pHead2==NULL)return pHead1; 5 if(pHead1->val > pHead2->val) 6 { 7 ListNode *tmp=pHead1; 8 pHead1=pHead2; 9 pHead2=tmp; 10 } 11 ListNode *newHead=pHead1; 12 newHead->next=Merge(pHead1->next, pHead2); 13 return newHead; 14 }