您的位置:首页 > 其它

leetcode_023 Merge k Sorted Lists

2016-03-31 21:35 459 查看
题目分析:

合并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);  // 递归进行合并
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode