输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
/*
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;
} if(list2 == null){
return list1;
}
ListNode ln1;
ListNode ln;
if(list1.val<=list2.val){
ln =list1;
list1 = list1.next;
}else{
ln =list2;
list2 = list2.next;
}
ln1 =ln;
while(true){
if(list1==null||list2==null){
break;
}
if(list1.val<=list2.val){
ln.next =list1;
ln = ln.next;
list1 = list1.next;
}
else{
ln.next =list2;
ln = ln.next;
list2 =list2.next;
}
}
if(list1==null){
ln.next = list2;
}else{
ln.next = list1;
}
return ln1;
}
}
这我犯了一个错误,在while语句判定我一开始用的是list1!=null||list2!=null,会报不存在,后来才想到,不应该这样写,因为一个有null的话,再用.val肯定会报不存在错误。
思路:先创建两个链表,ln1用于返回(相当于表头),ln2用于从list1和list2转移结点(比较大小,谁小就把它加进新的链表尾部,直到有一个链表为空,把另一个链表的结点直接连到新链表就完成了),构成新的链表所以ln2肯定会移动,最后返回肯定ln2肯定不对。