LeetCode第22題–合併兩個排序好的鏈表
代碼
public class MergeSortedLists {
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode result = null; //變量在申請之後一定要初始化,否則會報編譯錯誤
//下面是三種特殊的情況,當其中有一個鏈表爲空時,直接返回不爲空的一個,如果兩個鏈表全部爲空,則返回空
if(l1 == null && l2 != null){
result = l2;
return result;
}
if(l2 == null && l1 != null){
result = l1;
return result;
}
if(l1 == null && l2 == null){
result = null;
return result;
}
result = new ListNode(0); //創建新的節點
ListNode current = result; //創建一個當前節點,result的指針不會發生變化,變化的是current
//System.out.println(current.val);
//處理兩個鏈表都不爲空的情況
while(l1 != null && l2 != null){
if(l1.val > l2.val){
current.val = l2.val;
l2 = l2.next;
if(l2 == null){
current.next = l1;
break;
}
ListNode temp = new ListNode(0);
current.next = temp;
current = current.next;
}else if(l1.val < l2.val) {
current.val = l1.val;
l1 = l1.next;
if(l1 == null){
current.next = l2;
break;
}
ListNode temp = new ListNode(0);
current.next = temp;
current = current.next;
}else{ //l1.val == l2.val
current.val = l1.val;
ListNode temp = new ListNode(0);
current.next = temp;
current = current.next;
current.val = l2.val;
l1 = l1.next;
l2 = l2.next;
if(l1 == null){
current.next = l2;
break;
}
if(l2 == null){
//System.out.println(l1.val + " " + l1.next.val);
//System.out.println("娃娃");
current.next = l1;
//System.out.println(current.next.val + " " + current.next.next.val);
break;
}
temp = new ListNode(0);
current.next = temp;
current = current.next;
}
}
return result;
}
}