输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1 == null){
return list2;
}else if(list2 == null){
return list1;
}else{
ListNode temp1 = new ListNode(0); //生成表头节点,指向链表,便于前后指针指向链表
temp1.next = list1;
ListNode temp2 = list1;
ListNode temp3 = null;
//将list2插入list1中
while(list2!=null){
temp3 = list2; //保存当前操作的list2节点
list2 = list2.next;
while(temp2 != null){
if(temp2.val > temp3.val){
temp1.next = temp3;
temp3.next = temp2;
temp1 = temp3;
break; //找到插入点插入后,即退出当前list1循环
}else{
temp1 = temp2;
temp2 = temp2.next;
}
}
if(temp2 == null){
list2 = temp3; //由于list2 = list2.next,故需回退一个节点
break; //temp2为空,则list2无需再循环查找插入点,应跳出当前list2循环
}
}
if(list2!=null){
temp1.next = list2;//当temp2为空时,表示list1已走到尽头,若此时list2还不为空,
//则list2剩下的元素均比list1大,直接接入到temp1即可
}
}
return list1;
}
}