首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
合并k个已排序的链表
[编程题]合并k个已排序的链表
热度指数:179593
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 256M,其他语言512M
算法知识视频讲解
合并 k
个升序的链表并将结果作为一个升序
的
链表返回其头节点。
数据范围:节点总数
,每个节点的val满足
要求:时间复杂度
示例1
输入
[{1,2,3},{4,5,6,7}]
输出
{1,2,3,4,5,6,7}
示例2
输入
[{1,2},{1,4,5},{6}]
输出
{1,1,2,4,5,6}
说明:本题目包含复杂数据结构ListNode,
点此查看相关信息
马上挑战
算法知识视频讲解
提交运行
算法知识视频讲解
添加笔记
求解答(14)
邀请回答
收藏(1290)
分享
提交结果有问题?
372个回答
435篇题解
开通博客
牛客题解官
发表于 2022-04-22 11:23:18
精华题解
题目的主要信息: 给定k个排好序的升序链表 将这k个链表合并成一个大的升序链表,并返回这个升序链表的头 举一反三: 学习完本题的思路你可以解决如下题目: BM4.合并有序链表 BM6.判断链表中是否有环 BM7.链表中环的入口节点 BM8.链表中倒数最后k个节点 BM9.删除链表的倒数第n个节点
展开全文
Maokt
发表于 2021-07-12 16:41:35
精华题解
算法思想一:辅助数组 解题思路 主要采用将列表中的链表结点值遍历存储到辅助数组中,再对数组进行排序,根据排序后的数组元素一次构建新链表 1、遍历列表,分别将每一个链表的元素值存储到数组tmp中 2、对tmp进行排序 3、依次遍历数组元素创新新链表 代码展示:
展开全文
未来0116
发表于 2021-07-15 10:41:33
精华题解
一.题目描述NC51合并k个已排序的链表题目链接:https://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6?tpId=188&&tqId=38611&rp=1&ru=/activity/oj&
展开全文
LaN666
发表于 2021-03-07 19:54:53
三种解法 分治 顺序合并 优先队列 首先做这道题,得先会一道基础的题目,没做过的可以先去做合并两个已排序的链表 分治(归并) 先分而治之,分到不能再分则合并(归并) 图解: import java.util.*; public class Solution { public ListN
展开全文
Vetrs
发表于 2020-08-30 20:34:20
//递归方法://分治思想,逐一攻破 class Solution { public: ListNode *mergeKLists(vector<ListNode *> &lists) { if(lists.size() == 0)
展开全文
于1111
发表于 2020-09-13 21:18:23
merge的返回值,当left>=right,则说明全都有序,此时只需要返回list.get(low)即可。 /** * 合并k个已排序的链表并将其作为一个已排序的链表返回。 * 分析并描述其复杂度。---熟悉mergeSort,返回值不同!!当low>=hi
展开全文
tanglin3438
发表于 2022-04-03 07:44:21
# class ListNode: # def __init__(self, x): # self.val = x # self.next = None # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @para
展开全文
Carmen-Xiao
发表于 2021-11-22 20:22:20
分而治之! 本题能过很好的理解分治和递归。 做本题之前,可以做一下https://leetcode-cn.com/problems/merge-two-sorted-lists/这个题目! 我们如果能够做到合并两个有序的链表,剩下的就是分治算法的思维了。 思路分析:
展开全文
麻豆出品
发表于 2020-09-06 16:23:16
首先吐槽一下,有些老铁采用了这种投机取巧的方法:直接遍历列表,取出每个链表里面的值然后进行数组排序,最后再依次插入到一个新链表中。 喂,你要这么写,那面试官只能面带微笑的告诉你:“写的不错,今天的面试就先到这里吧。”很明显这种解法走偏了,自己刷题可以试,面试可别这么整。这种题其实就是两个有序链表合并
展开全文
天上掉下来SCI
发表于 2022-04-15 11:39:32
试了三种方法 第一种:先把所有链表首尾相接,之后再利用冒泡排序。 struct ListNode p1; struct ListNode p2; struct ListNode p3; struct ListNode phead; p0=NULL; p
展开全文
ypqhappy
发表于 2021-08-27 21:24:47
class Solution { public: ListNode *mergeKLists(vector<ListNode *> &lists) { // 扔到数组里可以解决 vector<int> arr;
展开全文
2019113916
发表于 2021-10-08 08:21:50
题意概述 给定k个升序的链表 要求将其合为一个升序的链表 方法一:顺序合并 思路与具体做法 依次合并两个链表 每次合并在两个链表的公共部分,将权值较小的结点放在新建链表后 最后如果两个链表谁还有剩余,则接在新建链表后,即完成对两个链表的合并 如此进行k次,即完成k个链表的合并 class S
展开全文
牛客410632071号
发表于 2022-04-05 15:33:06
两两排序法 struct ListNode* Merge(struct ListNode* pHead1, struct ListNode* pHead2 ) { //改变原两个链表的指针指向排成新链表 节省空间 struct ListNode* H=malloc(sizeof(st
展开全文
问题信息
分治
链表
堆
难度:
372条回答
1290收藏
26658浏览
热门推荐
通过挑战的用户
查看代码
随机昵称都有什...
2023-02-17 16:17:54
牛客30382...
2022-12-25 13:07:31
牛客14296...
2022-11-25 17:06:16
CDYu
2022-09-30 21:52:48
lamf
2022-09-28 22:26:01
相关试题
要求先给出思路,然后写代码,可以使...
搜狐
查找
分治
评论
(3)
两颗二叉树T1和T2,T1的节点数...
阿里巴巴
树
分治
评论
(2)
编程题:输入一个正整数,若该数能用...
网易
递归
分治
评论
(16)
“乔布斯不做调查,张小龙不看数据。...
用户研究
评论
(1)
如何检验聚类分析结果
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题
import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * public ListNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param lists ListNode类ArrayList * @return ListNode类 */ public ListNode mergeKLists (ArrayList
lists) { // write code here } }
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param lists ListNode类vector * @return ListNode类 */ ListNode* mergeKLists(vector
& lists) { // write code here } };
#coding:utf-8 # class ListNode: # def __init__(self, x): # self.val = x # self.next = None # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param lists ListNode类一维数组 # @return ListNode类 # class Solution: def mergeKLists(self , lists ): # write code here
using System; using System.Collections.Generic; /* public class ListNode { public int val; public ListNode next; public ListNode (int x) { val = x; } } */ class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param lists ListNode类一维数组 * @return ListNode类 */ public ListNode mergeKLists (List
lists) { // write code here } }
/* * function ListNode(x){ * this.val = x; * this.next = null; * } */ /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param lists ListNode类一维数组 * @return ListNode类 */ function mergeKLists( lists ) { // write code here } module.exports = { mergeKLists : mergeKLists };
val = $x; } }*/ /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param lists ListNode类一维数组 * @return ListNode类 */ function mergeKLists( $lists ) { // write code here }
# class ListNode: # def __init__(self, x): # self.val = x # self.next = None # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param lists ListNode类一维数组 # @return ListNode类 # class Solution: def mergeKLists(self , lists: List[ListNode]) -> ListNode: # write code here
package main import "fmt" import . "nc_tools" /* * type ListNode struct{ * Val int * Next *ListNode * } */ /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param lists ListNode类一维数组 * @return ListNode类 */ func mergeKLists( lists []*ListNode ) *ListNode { // write code here }
/** * struct ListNode { * int val; * struct ListNode *next; * }; */ /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param lists ListNode类一维数组 * @param listsLen int lists数组长度 * @return ListNode类 */ struct ListNode* mergeKLists(struct ListNode** lists, int listsLen ) { // write code here }
# class ListNode # attr_accessor :val, :next # # def initialize(val = 0, _next = nil) # @val, @next = val, _next # end # end # # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param lists ListNode类一维数组 # @return ListNode类 # class Solution def mergeKLists(lists) # write code here end end
/** * class ListNode(var val: Int) { * var next: ListNode = null * } */ object Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param lists ListNode类一维数组 * @return ListNode类 */ def mergeKLists(lists: Array[ListNode]): ListNode = { // write code here } }
/** * class ListNode(var `val`: Int) { * var next: ListNode? = null * } */ object Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param lists ListNode类一维数组 * @return ListNode类 */ fun mergeKLists(lists: Array
): ListNode? { // write code here } }
import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * public ListNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param lists ListNode类一维数组 * @return ListNode类 */ public ListNode mergeKLists (ListNode[] lists) { // write code here } }
/*class ListNode { * val: number * next: ListNode | null * constructor(val?: number, next?: ListNode | null) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : next) * } * } */ /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param lists ListNode类一维数组 * @return ListNode类 */ export function mergeKLists(lists: ListNode[]): ListNode { // write code here }
/** * public class ListNode { * public var val: Int * public var next: ListNode? * public init(_ val: Int = 0, _ next: ListNode? = nil) { * self.val = val * self.next = next * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param lists ListNode类一维数组 * @return ListNode类 */ func mergeKLists ( _ lists: [ListNode?]) -> ListNode? { // write code here } }
/** * #[derive(PartialEq, Eq, Debug, Clone)] * pub struct ListNode { * pub val: i32, * pub next: Option
> * } * * impl ListNode { * #[inline] * fn new(val: i32) -> Self { * ListNode { * val: val, * next: None, * } * } * } */ struct Solution{ } impl Solution { fn new() -> Self { Solution{} } /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param lists ListNode类一维数组 * @return ListNode类 */ pub fn mergeKLists(&self, lists: Vec
>>) -> Option
> { // write code here } }
[{1,2,3},{4,5,6,7}]
{1,2,3,4,5,6,7}
[{1,2},{1,4,5},{6}]
{1,1,2,4,5,6}