將兩個升序鏈表合併爲一個新的 升序 鏈表並返回。新鏈表是通過拼接給定的兩個鏈表的所有節點組成的。
示例:
輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4
思路:新鏈表是通過拼接給定的兩個鏈表的所有節點組成的,這句話限制了我們不能新增一個鏈表來存儲合併後的鏈表的節點,而是需要在比較的過程中不斷調整兩個鏈表的節點的指針指向最後把兩個鏈表合併成一個鏈表。
在遍歷時當兩個鏈表都還沒有走到最後爲空的位置,需要對兩個鏈表當前的節點對比,取值小的那個。當其中有一個鏈表已經遍歷完了。那麼剩下沒有遍歷完的鏈表剩下的節點就放在後面就可以了。
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
//引入頭結點,減少對第一個結點的特殊處理
ListNode pre = new ListNode(0);
ListNode cur = pre;
while(null != l1 && null != l2){
if (l1.val <= l2.val) {
cur.next = l1;
l1 = l1.next;
}
else{
cur.next = l2;
l2 = l2.next;
}
cur = cur.next;
}
cur.next = l1 != null ? l1:l2;
return pre.next;
}