Merge Two Sorted Lists — Dummy Head Merge
Advertisement
Problem 209 · Merge Two Sorted Lists
Difficulty: Easy · Pattern: Dummy Head + Merge
Solutions
// C
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
struct ListNode dummy = {0, NULL}, *cur = &dummy;
while (l1 && l2) {
if (l1->val <= l2->val) { cur->next = l1; l1 = l1->next; }
else { cur->next = l2; l2 = l2->next; }
cur = cur->next;
}
cur->next = l1 ? l1 : l2;
return dummy.next;
}
// C++
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode dummy(0); ListNode* cur = &dummy;
while (l1 && l2) {
if (l1->val <= l2->val) { cur->next = l1; l1 = l1->next; }
else { cur->next = l2; l2 = l2->next; }
cur = cur->next;
}
cur->next = l1 ? l1 : l2;
return dummy.next;
}
// Java
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode dummy = new ListNode(0), cur = dummy;
while (l1 != null && l2 != null) {
if (l1.val <= l2.val) { cur.next = l1; l1 = l1.next; }
else { cur.next = l2; l2 = l2.next; }
cur = cur.next;
}
cur.next = l1 != null ? l1 : l2;
return dummy.next;
}
# Python
def mergeTwoLists(l1, l2):
dummy = cur = ListNode(0)
while l1 and l2:
if l1.val <= l2.val: cur.next = l1; l1 = l1.next
else: cur.next = l2; l2 = l2.next
cur = cur.next
cur.next = l1 or l2
return dummy.next
Complexity
- Time: O(m+n)
- Space: O(1)
Advertisement