1. 程式人生 > >leetcode-21 合併兩個有序連結串列(MergeTwoSortedLists)-java

leetcode-21 合併兩個有序連結串列(MergeTwoSortedLists)-java

題目:合併兩個有序連結串列

將兩個有序連結串列合併為一個新的有序連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。 

public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
    ListNode listNode = new ListNode(0);
    ListNode firstNode = listNode;

    while (l1 != null && l2 != null) {
        if (l1.val <= l2.val) {
            listNode.next 
= l1; l1 = l1.next; } else { listNode.next = l2; l2 = l2.next; } listNode = listNode.next; } while (l1 != null) { listNode.next = l1; l1 = l1.next; listNode = listNode.next; } while (l2 != null) { listNode.next
= l2; l2 = l2.next; listNode = listNode.next; } return firstNode.next; }

變數註釋:

firstNode //相當於頭節點

思路:

這個題目就是歸併排序中的歸併操作,將兩個有序陣列(連結串列)合併為一個有序的陣列。

//第一個while迴圈,將 l1 和 l2 進行比較,誰小誰就合併到 listNode,直到 l1 或者 l2 為空

//第二個while迴圈和第三個while迴圈,將 l1 或者 l2 剩下的節點合併到 listNode

最後返回的是 firstNode.next //頭節點是不需要的