解題思路
本題的目標是不額外生成 linked list 的情況下,將兩個 linked list 合併。
這個問題可以分三個部分來解決。首先,如何處理開頭的 node?該問題可以由 dummy node 的概念解決,意思是額外 new 一個多個 node 出來,用它的 next 來指向 merged list 的 head。
再來是如何 merge?其實也很簡單,想像說每次都比較 list 的頭,看哪個值比較小就把上個 node 的 next 指過來,同時記得更新 current 指到哪,以及 list 往後指一個。
最後是 while 迴圈結束時,並不代表事情做完了,兩個 list 還會有一個 list 沒空掉。那其實直接把 next 指向剩下的 list 就好了。
程式碼
class Solution { public: ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) { ListNode dummpy; ListNode* current = &dummpy; while(list1 != nullptr && list2 != nullptr) { if(list1->val < list2->val) { current->next = list1; list1 = list1->next; } else { current->next = list2; list2 = list2->next; } current = current->next; } if(list1 != nullptr) current->next = list1; else if(list2 != nullptr) current->next = list2; return dummpy.next; } };
沒有留言:
張貼留言