LeetCode题目:23. Merge k Sorted Lists

来源:互联网 发布:禁止域名转出万网 编辑:程序博客网 时间:2024/06/03 17:07

LeetCode题目:23. Merge k Sorted Lists

原题链接:https://leetcode.com/problems/merge-k-sorted-lists/description/

解题思路:

将k个链表合并,看成依次将其中两个链表合并,即可简化题目。

核心思想:

不停取两个链表合并,再放回去,直到剩下唯一一个链表。

代码细节:

  1. 在链表合并的时候,新建一个结点当做头结点前的一个节点,这样头结点就不用特殊进行操作了。

坑点:

  1. 输入为空。

代码:

// 将两个有序链表合成一个 ListNode* TwoListstoOne(ListNode *h1, ListNode *h2) {    ListNode *newHeadPre = new ListNode(0);  // 创立头结点的前一个节点     ListNode *newTemp = newHeadPre;          // 用于遍历的节点    // 将小的值加入新链表     while (h1 != NULL || h2 != NULL) {        if (h1 == NULL || (h2 != NULL && h1->val > h2->val)) {            newTemp->next = new ListNode(h2->val);            h2 = h2->next;        }        else {            newTemp->next = new ListNode(h1->val);            h1 = h1->next;         }        newTemp = newTemp->next;    }     return newHeadPre->next;}ListNode* mergeKLists(vector<ListNode*>& lists) {    // 输入为空     if (lists.empty())  return NULL;    while (lists.size() > 1) {        // 将前两个链表合并成新链表         lists.push_back(TwoListstoOne(lists[0], lists[1]));        // 删除旧链表        lists.erase(lists.begin(), lists.begin() + 2);     }     return lists[0];}
原创粉丝点击