1. 程式人生 > 其它 >【力扣 087】21. 合併兩個有序連結串列

【力扣 087】21. 合併兩個有序連結串列

21. 合併兩個有序連結串列

將兩個升序連結串列合併為一個新的 升序 連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。 

示例 1:


輸入:l1 = [1,2,4], l2 = [1,3,4]
輸出:[1,1,2,3,4,4]
示例 2:

輸入:l1 = [], l2 = []
輸出:[]
示例 3:

輸入:l1 = [], l2 = [0]
輸出:[0]
 

提示:

兩個連結串列的節點數目範圍是 [0, 50]
-100 <= Node.val <= 100
l1 和 l2 均按 非遞減順序 排列

來源:力扣(LeetCode)
連結:https://leetcode.cn/problems/merge-two-sorted-lists
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

程式碼實現:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) 
    {
        ListNode *pa = list1, *pb = list2;
       ListNode *head = new ListNode(-1), *p = head;
       while(pa && pb)
       {
           if(pa->val <= pb->val) 
           {
               p->next = pa;
               p = p->next;
               pa = pa->next;
           }
           else
           {
               p->next = pb;
               p = p->next;
               pb = pb->next;
           }
       }
       if(pa) p->next  = pa;
       if(pb) p->next =pb;
        return head->next;
    }
};