合并两个有序链表

    科技2022-08-10  101

    /** * 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* mergeKLists(vector<ListNode*>& lists) { ListNode* ans = nullptr; for (int i = 0; i < lists.size(); i++) { ans = mergeTwoList(ans, lists[i]); } return ans; } ListNode* mergeTwoList(ListNode* p1, ListNode* p2) { if (!p1 || !p2) { return p1 ? p1 : p2; } ListNode head; ListNode* h = &head; ListNode* tail = &head; ListNode* cur1 = p1; ListNode* cur2 = p2; while (cur1 && cur2) { if (cur1->val < cur2->val) { tail->next = cur1; cur1 = cur1->next; } else { tail->next = cur2; cur2 = cur2->next; } tail = tail->next; } tail->next = cur1 ? cur1 : cur2; return h->next; } };
    Processed: 0.017, SQL: 8