21 合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

解法

  • Python
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        dummy = ListNode(-1)
        first = dummy
        while l1 and l2:
            if l1.val >= l2.val:
                first.next = l2
                l2 = l2.next
            else:
                first.next = l1
                l1 = l1.next
            first = first.next
        while l1:
            first.next = l1
            l1 = l1.next
            first = first.next
        while l2:
            first.next = l2
            l2 = l2.next
            first = first.next
        return dummy.next
  • C++
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        ListNode* dummy = new ListNode(-1);
        ListNode* first = dummy;

        while (l1&&l2){
            if (l1->val > l2->val){
                first->next = l2;
                l2 = l2->next;
            }
            else{
                first-> next = l1;
                l1 = l1->next;
            }
            first = first->next;
        }

        while (l1){
            first->next = l1;
            l1 = l1->next;
            first = first->next;
        }
        while (l2){
            first->next = l2;
            l2 = l2->next;
            first = first->next;
        }
        return dummy->next;
    }
};