zoukankan      html  css  js  c++  java
  • LeetCode_23.合并K个升序链表

    给你一个链表数组,每个链表都已经按升序排列。

    请你将所有链表合并到一个升序链表中,返回合并后的链表。

    示例 1:

    输入:lists = [[1,4,5],[1,3,4],[2,6]]
    输出:[1,1,2,3,4,4,5,6]
    解释:链表数组如下:
    [
      1->4->5,
      1->3->4,
      2->6
    ]
    将它们合并到一个有序链表中得到。
    1->1->2->3->4->4->5->6
    

    示例 2:

    输入:lists = []
    输出:[]
    

    示例 3:

    输入:lists = [[]]
    输出:[]
    

    提示:

    • k == lists.length
    • 0 <= k <= 10^4
    • 0 <= lists[i].length <= 500
    • -10^4 <= lists[i][j] <= 10^4
    • lists[i]升序 排列
    • lists[i].length 的总和不超过 10^4

    C#代码

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     public int val;
     *     public ListNode next;
     *     public ListNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public ListNode MergeKLists(ListNode[] lists)
        {
            int index = 0;
            int count = lists.Length;
            int temp = 1;
    
            if (count == 0) return null;
    
            while (temp < count)
            {
                index = 0;
                while (index + temp < count)
                {
                    lists[index] = MergeTwoList(lists[index], lists[index + temp]);
                    index += temp * 2;
                }
                temp *= 2;
            }
            return lists[0];
        }
    
        public ListNode MergeTwoList(ListNode node1, ListNode node2)
        {
            Stack<int> stack = new Stack<int>();
            int val1, val2;
            while (node1 != null && node2 != null)
            {
                val1 = node1.val;
                val2 = node2.val;
                if (val1 <= val2)
                {
                    stack.Push(val1);
                    node1 = node1.next;
                }
                else
                {
                    stack.Push(val2);
                    node2 = node2.next;
                }
            }
    
            while (node1 != null)
            {
                val1 = node1.val;
                stack.Push(val1);
                node1 = node1.next;
            }
    
            while (node2 != null)
            {
                val2 = node2.val;
                stack.Push(val2);
                node2 = node2.next;
            }
    
            ListNode node = null;
            while (stack.Count > 0)
            {
                node = new ListNode() { val = stack.Pop(), next = node };
            }
            return node;
        }
    }
    
  • 相关阅读:
    【筛法求素数】Codeforces Round #426 (Div. 1) A. The Meaningless Game
    【构造】AtCoder Regular Contest 079 F
    【贪心】AtCoder Regular Contest 079 E
    【构造】AtCoder Regular Contest 079 D
    【树形dp】hdu6035 Colorful Tree
    【计算几何】【bitset】Gym
    【枚举】【高斯消元】Gym
    【矩阵乘法】Gym
    【枚举约数】Gym
    【置换群】【枚举约数】hdu6038 Function
  • 原文地址:https://www.cnblogs.com/fuxuyang/p/14244574.html
Copyright © 2011-2022 走看看