力扣【23】合并K个排序链表
生活随笔
收集整理的這篇文章主要介紹了
力扣【23】合并K个排序链表
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目:
給你一個鏈表數(shù)組,每個鏈表都已經(jīng)按升序排列。
請你將所有鏈表合并到一個升序鏈表中,返回合并后的鏈表。
示例 1:
輸入:lists = [[1,4,5],[1,3,4],[2,6]]
輸出:[1,1,2,3,4,4,5,6]
解釋:鏈表數(shù)組如下:
[
? 1->4->5,
? 1->3->4,
? 2->6
]
將它們合并到一個有序鏈表中得到。
1->1->2->3->4->4->5->6
示例 2:
輸入:lists = []
輸出:[]
示例 3:
輸入:lists = [[]]
輸出:[]
題解:
類似力扣【21】合并兩個有序鏈表。
package test; class ListNode {int val;ListNode next;ListNode(int x) { val = x; } } class Solution {public ListNode mergeKLists(ListNode[] lists) {int k = lists.length;ListNode Head = new ListNode(0);ListNode p = Head;while (true) {ListNode minNode = null;//必須放在for循環(huán)外面int minPointer = -1;//minnode和minpointer用的不熟for (int i = 0; i < k; i++) {//在三個鏈表中找第一個最小的節(jié)點if (lists[i] == null) {//第i個鏈表為空了,繼續(xù)continue;//這個continue用的好,如果三個都為null,則直接跳到minPointer == -1,就結(jié)束循環(huán)了}if (minNode == null || lists[i].val < minNode.val) {minNode = lists[i];minPointer = i;//minPointer是只三個鏈表頭部最小的那個}}if (minPointer == -1) {break;}p.next = minNode;p = p.next;lists[minPointer] = lists[minPointer].next;//是為了從第一個鏈表的1移動到4,因為1循環(huán)下來最小了,所以他的下一個可能也是最小}return Head.next;} }public class Main{public static void main (String []args){ListNode l1 = new ListNode(1);//@466ListNode l2 = new ListNode(4);//@467ListNode l3 = new ListNode(5);//@468ListNode q1 = new ListNode(1);//@469ListNode q2 = new ListNode(3);//@470ListNode q3 = new ListNode(4);//@471ListNode r1 = new ListNode(2);//@472ListNode r2 = new ListNode(6);//@473ListNode[] l = new ListNode[]{l1, q1, r1};//@474l1.next = l2;l2.next = l3;q1.next = q2;q2.next = q3;r1.next = r2;Solution p = new Solution();ListNode b = p.mergeKLists(l);while (b != null){System.out.print("->"+b.val);b = b.next;}} }?
總結(jié)
以上是生活随笔為你收集整理的力扣【23】合并K个排序链表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux安装ElasticSearch
- 下一篇: webpack 在js中引入静态图片