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

合并k个已排序的链表

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

package main
import . "nc_tools"
/*
 * type ListNode struct{
 *   Val int
 *   Next *ListNode
 * }
 */

/**
 * 
 * @param lists ListNode类一维数组 
 * @return ListNode类
*/
func mergeKLists( lists []*ListNode ) *ListNode {
	return merge(lists, 0, len(lists)-1)
}

func merge(list []*ListNode, left, right int) *ListNode {
	if left == right {
		return list[left]
	}
	if left > right {
		return nil
	}
	mid := left + (right-left)/2
	return mergeTwoList(merge(list, left, mid), merge(list, mid+1, right))
}

func mergeTwoList(list1, list2 *ListNode) *ListNode {
	res := &ListNode{Val: 0}
	tmp := res
	for list1 != nil && list2 != nil {
		if list1.Val > list2.Val {
			tmp.Next = &ListNode{Val: list2.Val}
			tmp = tmp.Next
			list2 = list2.Next
		} else {
			tmp.Next = &ListNode{Val: list1.Val}
			tmp = tmp.Next
			list1 = list1.Next
		}
	}
	if list1 != nil {
		tmp.Next = list1
	}
	if list2 != nil {
		tmp.Next = list2
	}
	return res.Next
}

全部评论

相关推荐

09-17 10:53
四川大学 C++
牛客91242815...:会写标书没有任何卵用,鉴定为横向垃圾导师的受害者
点赞 评论 收藏
分享
10-21 00:37
已编辑
门头沟学院 C++
小浪_Coding:你问别人,本来就是有求于人,别人肯定没有义务免费回答你丫, 有点流量每天私信可能都十几,几十条的,大家都有工作和自己的事情, 付费也是正常的, 就像你请别人搭把手, 总得给人家买瓶水喝吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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