leetcode_023 Merge k Sorted Lists

来源:互联网 发布:预算报价软件 编辑:程序博客网 时间:2024/05/20 15:37

题目分析:

  • 合并k个已经排好序的链表为一个有序链表。

解题思路:

  • 递归实现

    利用递归思想,依次两两合并一个有序链表,直到合并为一个链表为止。

  • 实现程序

    //合并两个有序单链表ListNode *mergeTwoLists(ListNode *l1, ListNode *l2){    ListNode *head = (ListNode *)malloc(sizeof(ListNode));    head->val = -1;    head->next = NULL;    ListNode *temp = head;    ListNode *p = l1, *q = l2;    while(p != NULL && q != NULL)   // 遍历两个链表进行合并     {        if (p->val <= q->val)        {            temp->next = p;            temp = temp->next;            p = p->next;        }        else if (p->val > q->val)        {            temp->next = q;            temp = temp->next;            q = q->next;        }    }    if (p != NULL)    {        temp->next = p;    }    else if (q != NULL)    {        temp->next = q;    }    return head->next;  } //合并k个有序的单链表ListNode *mergeKLists(vector<ListNode *> &lists){    if (lists.size() == 0)          // 处理特殊情况         return NULL;    if (lists.size() == 1)        return lists[0];    vector<ListNode *> newLists;    int start = 0;    if (lists.size() % 2 != 0)      // 处理链表为奇数情况     {        newLists.push_back(lists[0]);        start++;    }    for (int i = start; i < lists.size(); i += 2)   // 两两合并链表     {        ListNode *temp = mergeTwoLists(lists[i], lists[i + 1]);        newLists.push_back(temp);    }     return mergeKLists(newLists);  // 递归进行合并 } 
0 0
原创粉丝点击