心得:仿照归并排序,两两合并,注意更新的判断条件,注意事项看代码!!!
注意判断条件。
** * 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; }}