LeetCode-023-合併K個升序連結串列
阿新 • • 發佈:2021-06-27
合併K個升序連結串列
題目描述:給你一個連結串列陣列,每個連結串列都已經按升序排列。
請你將所有連結串列合併到一個升序連結串列中,返回合併後的連結串列。
示例說明請見LeetCode官網。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/merge-k-sorted-lists/
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
解法一:連結串列遍歷
- 首先,如果lists為null或者為空,直接返回null;
- 然後,迴圈遍歷陣列中的連結串列,記錄每一次遍歷過程中的最小值min和相應的陣列索引minIndex,將min放到結果result
中,同時將陣列索引為minIndex的連結串列往後移一位,遍歷中止的條件就是當陣列中所有的連結串列都為空時迴圈結束。 遍歷結束後,返回結果result。
public class LeetCode_023 { public static ListNode mergeKLists(ListNode[] lists) { if (lists == null || lists.length == 0) { return null; } int count = 0; ListNode result = new ListNode(-1); ListNode next = result; do { count = 0; int min = Integer.MAX_VALUE, minIndex = -1; for (int i = 0; i < lists.length; i++) { if (lists[i] != null) { count++; if (min > lists[i].val) { min = lists[i].val; minIndex = i; } } } if (count > 0) { next.next = new ListNode(min); lists[minIndex] = lists[minIndex].next; next = next.next; } } while (count > 0); return result.next; } public static void main(String[] args) { ListNode l1 = new ListNode(1); l1.next = new ListNode(4); l1.next.next = new ListNode(5); ListNode l2 = new ListNode(1); l2.next = new ListNode(3); l2.next.next = new ListNode(4); ListNode l3 = new ListNode(2); l3.next = new ListNode(6); ListNode result = mergeKLists(new ListNode[]{l1, l2, l3}); while (result != null) { System.out.print(result.val + " "); result = result.next; } } }
【每日寄語】 當所有事情看起來都像在跟你作對時,請記得飛機也是逆風起飛的,而不是順風而起。