1. 程式人生 > >合併兩個有序的連結串列

合併兩個有序的連結串列

將兩個有序連結串列合併為一個新的有序連結串列並返回。

新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。

示例:

輸入: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