【LeetCode】23. Merge k Sorted Lists

合并k个已合并链表。

思路:先把链表两两合并,直到合并至只有一个链表

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution {
10 public:
11     ListNode* mergeKLists(vector<ListNode*>& lists) {
12         if(lists.empty()) return NULL;
13         int len = lists.size();
14         while(len>1){
15             for(int i=0;i<len/2;i++){
16                 lists[i] = mergeTwoLists(lists[i],lists[len-1-i]);
17             }
18             len = (len+1)/2;   //这个技巧很有用
19         }
20         return lists.front();
21     }
22     ListNode* mergeTwoLists(ListNode*l1,ListNode*l2){
23         if(NULL==l1) return l2;
24         else if(NULL==l2) return l1;
25         if(l1->val<l2->val){
26             l1->next = mergeTwoLists(l1->next,l2);
27             return l1;
28         }
29         else {
30             l2->next = mergeTwoLists(l1,l2->next);
31             return l2;
32         }
33     }
34 };
时间: 2024-12-20 11:26:13

【LeetCode】23. Merge k Sorted Lists的相关文章

【一天一道LeetCode】#23. Merge k Sorted Lists

一天一道LeetCode系列 (一)题目 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. (二)解题 合并K个已拍好序的链表.剑指上有合并两个已排好序的链表的算法,那么K个数,我们可以采用归并排序的思想,不过合并函数可能需要修改一下,换成合并两个已排好序的链表的方法.代码如下: /** * Definition for singly-linked

[Leetcode][Python]23: Merge k Sorted Lists

# -*- coding: utf8 -*-'''__author__ = '[email protected]' 23: Merge k Sorted Listshttps://oj.leetcode.com/problems/merge-k-sorted-lists/ Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. ===Comments by

【leetcode】 21. Merge Two Sorted Lists

题目描述: Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. 解题分析: 再基础不过的题了,直接看代码吧^-^ 具体代码: 1 /** 2 * Definition for singly-linked list. 3 * public class ListNode

【LeetCode】21. Merge Two Sorted Lists

题目: Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. 思路:比较每个列表的第一个元素. 合并小的添加到列表中. 最后,当其中一个是空的,只需将它附加到合并后的列表,因为它已经排序. /** * Definition for singly-linked list.

Python 解LeetCode:23. Merge k Sorted Lists

题目描述:把k个排序的链表组成的列表合并成一个排序的链表 思路: 使用堆排序,遍历列表,把每个列表中链表的头指针的值和头指针本身作为一个元素放在堆中: 第一步中遍历完列表后,此时堆中最多会有n个元素,n是列表的长度: 当堆不为空,取出堆中的最小值,然后把该值的指针指向下一个元素,并入堆: 第3步可以确保堆永远是o(n)大小的: 堆为空返回头结点就可以了 # Definition for singly-linked list. # class ListNode(object): # def __i

leetcode problem :23. Merge k Sorted Lists

class Solution { public: ListNode* mergeKLists(vector<ListNode*>& lists) { ListNode* head = NULL; ListNode* current = NULL; for (int i = 0; i < lists.size(); ++i){ if (!lists[i]){ lists.erase(lists.begin()+i); --i; } } while (lists.size()){ i

【LeetCode】21. Merge Two Sorted Lists合并两个有序链表,得到新的有序链表

一.描述: 二.思路: 两个有着相同排序类型(降序或升序)的链表,合并为一新的链表,并且要求有序(和两个子链表的排序相同): 判断2个子链表是否为空,若有空链表,则返回另一不为空的链表: 两者均不为空,判断链表结点值val的大小,(此处应该有2中排序结果,大->小 或 小->大),该题中提交只接受 小->大 类型: 故新的链表头指针指向val值较小的结点,子链表中去除已经被新链表指向的结点,再次重复该操作,即新链表头指针.next指向下一个较小值对应的结点--,即递归实现. 三.代码:

[LeetCode]23. Merge k Sorted Lists

23. Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 给定k个排序了的链表,合并k个链表成一个排序链表. 本程序思路: 1)首先得到K个链表的长度和存在len中 2)从K个链表中找到值最小的那个节点,把该节点添加到合并链表中 3)重复len次即可把所有节点添加到合并链表中. 注意事项: 1)K个链表中有的

23. Merge k Sorted Lists - LeetCode

Question 23.?Merge k Sorted Lists Solution 题目大意:合并链表数组(每个链表中的元素是有序的),要求合并后的链表也是有序的 思路:遍历链表数组,每次取最小节点 Java实现: public ListNode mergeKLists(ListNode[] lists) { ListNode preHead = new ListNode(0); ListNode minNode = getMinNode(lists); ListNode tmpNode =