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

合并k个已排序的链表

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


    public ListNode mergeKLists (List<ListNode> lists) {
     
		//先把空的元素剔除
        for (int i = 0; i < lists.Count; i++) {
            if (lists[i] == null) {
                lists.RemoveAt(i);
                i--;
            }
        }
		//全空就返回0
        if (lists.Count == 0) {
            return null;
        }
	  	//就一个元素就返回这个元素头
        if (lists.Count < 1) {
            return lists[0];
        }
	  	//给新的链表来一个虚拟头
        ListNode VirtualHead = new ListNode(0);
		//这里表示新链表的最新的一个节点
	  ListNode NowPtr = VirtualHead;

	  //用序号来表示集合中最小的元素的位置
	  int GetMin = 0;
		//当集合元素为空时,意味着排序完成了
        while (lists.Count != 0) {
			//进行多轮选择,每轮到一个就拿来和GetMin位置上的元素进行比较,值小的那个用来就把序号赋值给GetMin
            for (int i = 0; i < lists.Count; i++) {
                if (lists[i].val < lists[GetMin].val) {
                    GetMin = i;
                }
            }
		  //进行到最后没有元素了就退出来
            if (lists.Count == 0) {
                break;
            }
            NowPtr.next = lists[GetMin];
            NowPtr = NowPtr.next;
            lists[GetMin] = lists[GetMin].next;
            if (lists[GetMin] == null) {
                lists.RemoveAt(GetMin);
                GetMin = 0;
            }

        }


        return VirtualHead.next;
        // write code here
    }

全部评论

相关推荐

爱吃肉的伊登在写日记:好棒,27届简历能做成这个样子,但是第一个项目感觉cover住难度还是不小的,特别是二面的时候肯定要对分布式系统设计这一块儿有高出正常面试者的水平才行
点赞 评论 收藏
分享
05-12 16:04
已编辑
江西财经大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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