[leetcode] 21 合併兩個有序鏈表

問題描述

將兩個升序鏈表合併爲一個新的升序鏈表並返回。新鏈表是通過拼接給定的兩個鏈表的所有節點組成的。

示例

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

模版

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
    }
};

解題思路

頭節點經典問題,合併出來的新鏈表需要先建立一個頭節點,然後最後輸出頭節點的下一個節點即可。遞歸和迭代都可以解決這個題。

完整代碼

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        ListNode* l3=new ListNode(0);
        ListNode* currentNode3=l3;
        while(l1!=nullptr && l2!=nullptr){
            if(l1->val>l2->val){
                currentNode3->next=l2;
                l2=l2->next;
            }
            else {
                currentNode3->next=l1;
                l1=l1->next;
            }
            currentNode3=currentNode3->next;
        }
        currentNode3->next=(l1==nullptr?l2:l1);
        return l3->next;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章