23. 合并K个排序链表-LeetCode
Posted pc-m
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了23. 合并K个排序链表-LeetCode相关的知识,希望对你有一定的参考价值。
心得:仿照归并排序,两两合并,注意更新的判断条件,注意事项看代码!!!
注意判断条件。
**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeKLists(ListNode[] lists)
{
if(lists==null||lists.length==0)
return null;
int n=lists.length;
while(n>1)
{
for(int i=0;i<(n+1)/2;i++)
{
lists[i]=mergeArr(lists,i,i+(n+1)/2,n);
}
n=(n+1)/2;
}
return lists[0];
}
public ListNode mergeArr(ListNode[] lists,int a,int b,int n)
{
if(b>=n) /////此处n非常重要,一定要记得传入,否则会导致死循环!!!
return lists[a];
ListNode head=new ListNode(1);
ListNode tmp=head;
while(lists[a]!=null&&lists[b]!=null)
{
if(lists[a].val>lists[b].val)
{
tmp.next=lists[b];
// tmp=tmp.next;
lists[b]=lists[b].next;
tmp=tmp.next;
}
else
{
tmp.next=lists[a];
// tmp=tmp.next;
lists[a]=lists[a].next;
tmp=tmp.next;
}
}
if(lists[a]==null)
{
tmp.next=lists[b];
}
if(lists[b]==null)
{
tmp.next=lists[a];
}
return head.next;
}
}
以上是关于23. 合并K个排序链表-LeetCode的主要内容,如果未能解决你的问题,请参考以下文章