首页 > 其他分享 >(链表)05-合并K个已排序的链表

(链表)05-合并K个已排序的链表

时间:2023-11-14 23:45:36浏览次数:33  
标签:null ListNode 05 lists next 链表 temp2 排序

 1 import java.util.*;
 2 
 3 /**
 4  * Definition for singly-linked list.
 5  * public class ListNode {
 6  *     int val;
 7  *     ListNode next;
 8  *     ListNode(int x) {
 9  *         val = x;
10  *         next = null;
11  *     }
12  * }
13  */
14 public class Solution {
15 
16     public ListNode mergeKLists(ArrayList<ListNode> lists) {
17         // 初始返回结果
18         ListNode result = null;
19         // 依次将待合并的链表与当前返回结果进行合并
20         for(ListNode node : lists) {
21             result = merge(result, node);
22         }
23         // 返回结果
24         return result;
25     }
26 
27     public ListNode merge(ListNode list1,ListNode list2) {
28         // 添加头节点
29         ListNode root = new ListNode(-1);
30         // 定义临时变量
31         ListNode temp1 = list1;
32         ListNode temp2 = list2;
33         ListNode current = root;
34         // 拼接新链表
35         while(temp1 != null && temp2 != null) {
36             if (temp1.val < temp2.val) {
37                 current.next = temp1;
38                 temp1 = temp1.next;
39             } else {
40                 current.next = temp2;
41                 temp2 = temp2.next;
42             }
43             current = current.next;
44         }
45         if (temp1 == null) {
46             current.next = temp2;
47         }
48         if (temp2 == null) {
49             current.next = temp1;
50         }
51         // 返回结果
52         return root.next;
53     }
54 }
 1 import java.util.*;
 2 
 3 /**
 4  * Definition for singly-linked list.
 5  * public class ListNode {
 6  *     int val;
 7  *     ListNode next;
 8  *     ListNode(int x) {
 9  *         val = x;
10  *         next = null;
11  *     }
12  * }
13  */
14 public class Solution {
15 
16     public ListNode mergeKLists(ArrayList<ListNode> lists) {
17         // 验证特殊场景
18         if(lists == null || lists.size() == 0) {
19             return null;
20         }
21         // 使用递归排序的思想合并链表
22         return mergeGroupLists(lists, 0, lists.size() - 1);
23     }
24 
25     public ListNode mergeGroupLists(List<ListNode> lists, int left, int right) {
26         // 返回区间合并结果
27         if (left == right) {
28             return lists.get(left);
29         }
30         // 计算中间点
31         int mid = (left + right) / 2;
32         // 将两个链表合并成一个链表
33         return merge(mergeGroupLists(lists, left, mid), mergeGroupLists(lists, mid + 1, right));
34     }
35 }

 

标签:null,ListNode,05,lists,next,链表,temp2,排序
From: https://www.cnblogs.com/StringBuilder/p/17832868.html

相关文章

  • 二叉排序树的删除
    #include<bits/stdc++.h>usingnamespacestd;constintENDFLAG=-1;//输入结束的标志typedefstruct{intkey;//关键字intotherinfo;//其他数据项}ElemType;istream&operator>>(istream&is,ElemType&e){cin>>e.key&......
  • (链表)12-单链表的排序
    1importjava.util.*;23/*4*publicclassListNode{5*intval;6*ListNodenext=null;7*publicListNode(intval){8*this.val=val;9*}10*}11*/12publicclassSolution{13/**14*@paramhead......
  • [题解] CF1051F The Shortest Statement
    TheShortestStatement给一张\(n\)个点\(m\)条边的无向连通图,保证\(m-n\le20\),\(q\)次询问求两个点间的最短路。\(n,m,q\le10^5\)。由于边数只比点数多20,所以如果我们建出这张图的一棵生成树,那么非树边至多有21条。那么现在两点之间的最短路就转化成了不......
  • Python冒泡排序算法
    冒泡排序算法是一种简单的排序算法,其基本思想是通过多次遍历数组,比较相邻的两个元素,如果它们的顺序不对则交换。这样一轮遍历之后,最大(或最小)的元素就会被移动到数组的最后,然后再对剩余的元素进行类似的操作,直到整个数组有序defbubble_sort(arr):n=len(arr)#外层循环控制遍历的......
  • 力扣-34-在排序数组中查找元素的第一个和最后一个位置
    一、题目力扣地址:https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array/description/二、解法思路:也是二分查找相关题目,详细解法看注释fromtypingimportListclassSolution:"""leetcode:34二分查找类题目,与传统二分查......
  • 表格数据拖拽排序 sortable.js
    需求拖拽表格的行数据,实现排序。问题拖拽后调用接口,但视图没变,还是原来的顺序场景:拖拽表格行数据后,tableDataArr中数据的orderNum值会改变,实现拖拽换序。期望情况:页面根据更改后的orderNum重新排序。实际情况:接口数据变了,但是页面行数据没有改变。也就是说,页面没有实现......
  • C++U5-05-广度优先搜索2
    广搜逻辑  广搜代码核心思路 广搜伪代码前面讲解的广度优先搜索案例都类似迷宫类的问题,但有些非迷宫类问题也可以使用广搜的思路解决[【广搜2】填涂颜色]【算法分析】可以在外面增加一圈0,然后从(0,0)位置开始广搜所有为0的位置,没有被搜索到且为0的......
  • SQL Server 分组排序后取第N条数据(或前N条)
    节选自https://blog.csdn.net/cxu123321/article/details/92059001分组取前N条数据SQLSELECT*FROM(SELECTROW_NUMBER()OVER(PARTITIONBYt1.XORDERBYt1.Y)ASRNUM,*FROMTable1t1)ASTWHERET.RNUM=NX:分组的字段;Y:排序的字段;N:第N条......
  • (链表)04-合并两个排序的链表
    /*publicclassListNode{intval;ListNodenext=null;ListNode(intval){this.val=val;}}*/publicclassSolution{publicListNodeMerge(ListNodelist1,ListNodelist2){//添加头节点ListNoderoot=ne......
  • (链表)11-链表相加
      1importjava.util.*;23/*4*publicclassListNode{5*intval;6*ListNodenext=null;7*}8*/910publicclassSolution{11/**12*13*@paramhead1ListNode类14*@paramhead2ListNode类15......