题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
ac:100%
思路:遍历链表list1,一个一个插入到list2中
public class A16合并两个排序的链表 {
//测试
public static void main(String[] args) {
ListNode16 node1 = new ListNode16(1);
ListNode16 node2 = new ListNode16(3);
ListNode16 node3 = new ListNode16(6);
ListNode16 node4 = new ListNode16(9);
ListNode16 node5 = new ListNode16(11);
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
ListNode16 node11 = new ListNode16(2);
ListNode16 node12 = new ListNode16(5);
ListNode16 node13 = new ListNode16(8);
ListNode16 node14 = new ListNode16(13);
ListNode16 node15 = new ListNode16(20);
node11.next = node12;
node12.next = node13;
node13.next = node14;
node14.next = node15;
ListNode16 merge = Merge(node1,node11);
System.out.println(merge);
}
public static ListNode16 Merge(ListNode16 list1,ListNode16 list2) {
if(list1 == null) {
return list2;
}
if(list2 == null) {
return list1;
}
//遍历链表list1,一个一个插入到list2中
ListNode16 pre = list2,next = list2.next,node = list1,head = list2,temp;
while(node != null) {
if(next != null) {
if(node.val < pre.val) {//一开始list2头结点小于list1头结点
head = list1;
temp = node.next;
node.next = pre;
next = pre;
pre = node;
node = temp;
} else if(node.val >=pre.val && node.val <=next.val) {
pre.next = node;
temp = node.next;
node.next = next;
pre = node;
node = temp;
} else {
pre = next;
next = next.next;
}
} else {
if(node.val >= pre.val) {
pre.next = node;
break;
} else {
//只有一开始有可能进入这里
head = list1;
temp = node.next;
node.next = pre;
next = pre;
pre = node;
node = temp;
}
}
}
return head;
}
}
class ListNode16 {
int val;
ListNode16 next = null;
ListNode16(int val) {
this.val = val;
}
}