简单类型:
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
ListNode dump = new ListNode(0);
ListNode cur2 = dump;
while (list1!=null&&list2!=null){
if(list1.val<list2.val){
cur2.next = list1;
list1 = list1.next;
cur2=cur2.next;
}else{
cur2.next = list2;
list2 = list2.next;
cur2=cur2.next;
}
}
if(list1!=null){
cur2.next = list1;
}else{
cur2.next = list2;
}
return dump.next;
}
}
两个有序链表合并为一个有序链表比较简单
重新维护一个链表,两个链表一起遍历,逐个选较小的添加即可,最终,一个添加完后,将另外一个全部添加进去即可。
import java.util.*;
public class Solution {
//合并K个有序链表的方法
public ListNode mergeKLists(ArrayList<ListNode> lists) {
return mergeList(lists,0,lists.size()-1);
}
public ListNode mergeList(ArrayList<ListNode> lists,int left,int right){
if(left==right) return lists.get(left);
if(left>right) return null;
int mid=left+(right-left)/2;
return merge(mergeList(lists,left,mid),mergeList(lists,mid+1,right));
}
//合并两个有序链表(和力扣的21题一样)
public ListNode merge(ListNode l1,ListNode l2){
if(l1==null)return l2;
if(l2==null) return l1;
if(l1.val<l2.val) {
l1.next=merge(l1.next,l2);
return l1;
}else{
l2.next=merge(l1,l2.next);
return l2;
}
}
}
思考:这个问题在有了合并两个链表的基础上就是一个想法的问题了,合并多个链表就是多次的合并两个链表,其实就是分治的问题,不断的分成两个链表的合并。这部分很重要哦!