Leetcode Hot100 第58题 23.合并K个升序链表

发布于:2025-03-17 ⋅ 阅读:(22) ⋅ 点赞:(0)

在这里插入图片描述

/**
 * 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* dummy = new ListNode(-1);
        ListNode* cur = dummy;
        while(list1&&list2){
            if(list1->val<list2->val){
                cur->next = list1;
                list1=list1->next;
            }else{
                cur->next = list2;
                list2=list2->next;
            }
            cur=cur->next;
        }
        if(list1) cur->next=list1;
        if(list2) cur->next=list2;
        return dummy->next;
    }
};

在这里插入图片描述

class Solution {
public:
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        return traverse(lists,0,lists.size()-1);
    }
    ListNode* traverse(vector<ListNode*>& lists,int l, int r){
        if(l>r) return nullptr;
        if(l==r) return lists[l];
        ListNode* left = traverse(lists, l, l+(r-l)/2);
        ListNode* right = traverse(lists, l+(r-l)/2 + 1, r);
        return mergeTwoLists(left,right);
    }
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        ListNode* dummy = new ListNode(-1);
        ListNode* cur = dummy;
        while(list1&&list2){
            if(list1->val<list2->val){
                cur->next = list1;
                list1=list1->next;
            }else{
                cur->next = list2;
                list2=list2->next;
            }
            cur=cur->next;
        }
        if(list1) cur->next=list1;
        if(list2) cur->next=list2;
        return dummy->next;
    }
};

网站公告

今日签到

点亮在社区的每一天
去签到