题目链接:23、合并K个升序链表
这道题最简单的思路就是在21题的基础上两个两个合并就行
代码如下:
/**
* Definition for singly-linked list.
* public class ListNode {
* public int val;
* public ListNode next;
* public ListNode(int val=0, ListNode next=null) {
* this.val = val;
* this.next = next;
* }
* }
*/
public class Solution {
public ListNode MergeKLists(ListNode[] lists) {
ListNode newHead = null;
if(lists == null || lists.Length==0){
return null;
}
if(lists.Length==1){
return lists[0];
}
if(lists.Length==2){
newHead = MergeTwoLists(lists[0],lists[1]);
return newHead;
}
newHead = MergeTwoLists(lists[0],lists[1]);
int length = lists.Length;
int index = 2;
while(index < length){
newHead = MergeTwoLists(newHead,lists[index++]);
}
return newHead;
}
public ListNode MergeTwoLists(ListNode list1, ListNode list2) {
ListNode dummy = new ListNode(0);
ListNode newHead = dummy;
while(list1!=null && list2!=null){
int v1 = list1.val;
int v2 = list2.val;
if(v1 <= v2){
newHead.next = list1;
newHead = newHead.next;
list1 = list1.next;
}else{
newHead.next = list2;
newHead = newHead.next;
list2 = list2.next;
}
}
newHead.next = list1==null?list2:list1;
return dummy.next;
}
}