合併兩個有序的連結串列
阿新 • • 發佈:2018-12-22
將兩個有序連結串列合併為一個新的有序連結串列並返回。
新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。
示例:
輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4
題目分析:
要將兩個有序的連結串列連線起來,可以設定兩個指標分別指向兩個連結串列的頭節點,從頭節點開始比較值,把值小的節點加在另一個節點後面,比較完後,兩個指標後移再比較,如果兩個連結串列的長度不一樣,比較結束後,再將比較長的連結串列剩餘的節點連線起來。
程式碼實現:
public static class ListNode { int
val; ListNode next; ListNode(int x) { val = x; } } public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode temp = new ListNode(0); ListNode res = temp; while (l1 != null && l2 != null) { if (l1.val <= l2.val){ temp.next = l1; l1 =l1.next; temp = temp.next; } else { temp.next = l2; l2 = l2.next; temp = temp.next; } } if (l1 == null){ temp.next = l2; } if (l2 == null){ temp.next = l1; } return res.next; }
注意,函式中返回的是res.next,而不是返回res,這是因為剛開始給temp new了一個節點值為0,它在結果中是不需要輸出的。
主函式:
public static void main(String[] args) { L3 l = new L3(); ListNode l1 = new ListNode(1); l1.next = new ListNode(2); l1.next.next = new ListNode(4); ListNode l2 = new ListNode(1); l2.next = new ListNode(3); l2.next.next = new ListNode(4); ListNode res = l.mergeTwoLists(l1,l2); while (res != null){ System.out.print(res.val + " "); res = res.next; } }
執行結果:
1 1 2 3 4 4