#yyds干货盘点# 合并 k 个排序链表
Posted 浪费人生的风
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点# 合并 k 个排序链表相关的知识,希望对你有一定的参考价值。
合并 k 个排序链表。
代码实现:
import java.util.Arrays;
class ListNode
int val;
ListNode next;
public ListNode(int val)
this.val=val;
public class MergeList
private static ListNode first=null;
private static ListNode second=null;
private static ListNode three=null;
/**
* 链表插入数据
* @param val
*/
public void addNode(int val)
ListNode newNode=new ListNode(val);
if(first==null)
first=newNode;
return;
ListNode tmp=first;
while(tmp.next!=null)
tmp=tmp.next;
//add Node to end
tmp.next=newNode;
public void addNode2(int val)
ListNode newNode=new ListNode(val);
if(second==null)
second=newNode;
return;
ListNode tmp=second;
while(tmp.next!=null)
tmp=tmp.next;
//add Node to end
tmp.next=newNode;
public void addNode3(int val)
ListNode newNode=new ListNode(val);
if(three==null)
three=newNode;
return;
ListNode tmp=three;
while(tmp.next!=null)
tmp=tmp.next;
//add Node to end
tmp.next=newNode;
/**
* 输出整个链表
* @param head
* @param indexName
*/
public void printNode(ListNode head,String indexName)
System.out.println(indexName);
while(head!=null)
System.out.print(head.val+" ");
head=head.next;
System.out.println();
public static void main(String[] args)
MergeList ml=new MergeList();
ListNode[] lists=new ListNode[3];
for(int i=1;i<4;i++)
ml.addNode(i);
for(int i=2;i<5;i++)
ml.addNode2(i);
for(int i=3;i<6;i++)
ml.addNode3(i);
ml.printNode(first,"first链表");
ml.printNode(second,"second链表");
ml.printNode(three,"three链表");
lists[0]=first;
lists[1]=second;
lists[2]=three;
ListNode mergeNode=ml.mergeKLists(lists);
ml.printNode(mergeNode,"merge链表");
/**
* 合并链表
* @param lists
* @return
*/
public ListNode mergeKLists(ListNode[] lists)
return partition(lists, 0, lists.length - 1);
/**
* 分治思想。两两比较排序再合并
* @param lists
* @param start
* @param end
* @return
*/
public ListNode partition(ListNode[] lists, int start, int end)
if (start == end)
return lists[start];
if (start < end)
int mid = (start + end) / 2;
ListNode l1 = partition(lists, start, mid);
ListNode l2 = partition(lists, mid + 1, end);
return mergeTwoLists(l1, l2);
return null;
/**
* 两个链表进行比较合并
* @param l1
* @param l2
* @return
*/
public ListNode mergeTwoLists(ListNode l1, ListNode l2)
if (l2 == null) return l1;
if (l1 == null) return l2;
if (l1.val < l2.val)
ListNode tmp = l1;
tmp.next = mergeTwoLists(l1.next, l2);
return tmp;
else
ListNode tmp = l2;
tmp.next = mergeTwoLists(l1, l2.next);
return tmp;
以上是关于#yyds干货盘点# 合并 k 个排序链表的主要内容,如果未能解决你的问题,请参考以下文章
#yyds干货盘点# LeetCode 腾讯精选练习 50 题:合并K个升序链表
#yyds干货盘点# LeetCode面试题:K 个一组翻转链表
#yyds干货盘点# LeetCode面试题:合并两个有序链表