Merge Two Sorted Lists – LeetCode 21
Problem
Description
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
Answer
Original
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { if((l1 == nullptr) && (l2 == nullptr)) return nullptr; ListNode *dummyRoot = new ListNode(0); ListNode *ptr = dummyRoot; while((l1 != nullptr) || (l2 != nullptr)){ if(l1 == nullptr) {ptr->next = new ListNode(l2->val); ptr = ptr->next; l2 = l2->next; continue;} if(l2 == nullptr) {ptr->next = new ListNode(l1->val); ptr = ptr->next; l1 = l1->next; continue;} if(l1->val < l2->val) {ptr->next = new ListNode(l1->val); ptr = ptr->next; l1 = l1->next;} else {ptr->next = new ListNode(l2->val); ptr = ptr->next; l2 = l2->next;} } ptr = dummyRoot->next; delete dummyRoot; return ptr; } };
|
思路
要求合并两个已排序的List,没有难度,单纯的遍历拼接,只需注意DummyRoot的处理就行了。不过事后看了不少答案都倾向复用参数已有的ListNode部分。我认为这个函数不应该引用原有的l1和l2,因为可能会因此造成潜在的问题,比如资源的不正确访问和释放。时间复杂度是$O(m + n)$,m和n分别为两个List的长度,空间复杂度是$O(1)$。
耗时$9$ ms,排名$38.42\%$。
Better
思路
另外的思路是递归解,就算了。