递归和迭代,C++ ,思路清晰
合并两个排序的链表
http://www.nowcoder.com/questionTerminal/d8b6b4358f774294a89de2a6ac4d9337
主要思路:
链表的天性是能够很好的支持插入,递归和非递归思路其实差不多,都是逐个比较。不过我建议不太了解的童鞋可以先看分递归的,把思路看明白递归的就容易了
class Solution { public: ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { if (pHead1 == nullptr) return pHead2; if (pHead2 == nullptr) return pHead1; if (pHead1->val<pHead2->val){ pHead1->next = Merge(pHead1->next,pHead2); return pHead1; }else{ pHead2->next = Merge(pHead2->next,pHead1); return pHead2; } } }; //迭代 ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { if (pHead1== nullptr) return pHead2; if (pHead2==nullptr) return pHead1; ListNode* mergeHead = nullptr; if (pHead1->val<=pHead2->val){ mergeHead= pHead1; pHead1 = pHead1->next; }else{ mergeHead= pHead2; pHead1 = pHead2->next; } ListNode* cur = mergeHead; while (pHead1 && pHead2){ if (pHead1->val<=pHead2->val){ cur->next =pHead1; pHead1 = pHead1->next; } else{ cur->next = pHead2; pHead2 = pHead2->next; } cur = cur->next; } if(pHead1) cur->next = pHead1; if (pHead2) cur->next = pHead2; return mergeHead; }