题解 | #合并k个已排序的链表#

合并k个已排序的链表

https://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6

package main


/*
 * type ListNode struct{
 *   Val int
 *   Next *ListNode
 * }
 */

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param lists ListNode类一维数组
 * @return ListNode类
 */


func mergeKLists(lists []*ListNode) *ListNode {
    return devideMerge(lists,0,len(lists)-1)
}

func devideMerge (lists []*ListNode,left, right int) *ListNode {

    if left > right {
        return nil 
    }
    if left == right {
        return lists[left]
    }
    mid := (left + right)/2
    return Merge(devideMerge(lists,left,mid),devideMerge(lists,mid+1,right))

}
func Merge(pHead1 *ListNode, pHead2 *ListNode) *ListNode {

	if pHead1 == nil {
		return pHead2
	}
	if pHead2 == nil {
		return pHead1
	}
	vh := &ListNode{}
	cur := vh
	for i := 0; ; i++ {
		if pHead1 == nil || pHead2 == nil {
			break
		}
		if pHead1.Val < pHead2.Val {
			cur.Next = pHead1
			pHead1 = pHead1.Next
		} else {
			cur.Next = pHead2
			pHead2 = pHead2.Next
		}
		cur = cur.Next
	}

	if pHead1 != nil {
		cur.Next = pHead1
	}

	if pHead2 != nil {
		cur.Next = pHead2
	}
	return vh.Next
}

全部评论
先拆后合,把K个合并,拆分成2个合并,然后再合并在一起
点赞 回复 分享
发布于 2023-10-24 08:44 上海

相关推荐

2025-12-28 16:32
重庆邮电大学 Java
程序员花海:1.技能放最后,来面试默认你都会,技能没啥用 2.实习写的看起来没啥含金量,多读读部门文档,包装下 接LLM这个没含金量 也不要用重构这种 不会给实习生做的 3.抽奖这个还是Demo项目,实际在公司里面要考虑策略,满减,触发点,触发规则 库存 之类的,不是这个项目这么简单 4.教育背景提前,格式为 教育背景 实习 项目 技能 自我评价
简历被挂麻了,求建议
点赞 评论 收藏
分享
在喝茶的杨桃很郁闷:我简单喵两句: 1.如果不是实在没东西写不要写熟悉async await这些语法层面的东西 2.也不要写熟悉HTTP,因为http内容很多,稍微深挖一点你不会的话会让人有一种“原来你简历上面的东西都没有完全掌握”的感觉,容易给自己挖坑 3.自我评价可以删了 4.我在复习明天的面试,先mark,后面再回来继续建议
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务