[LeetCode] 21. Merge Two Sorted Lists


質問リンク


https://leetcode.com/problems/merge-two-sorted-lists/

コミットコード

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} l1
 * @param {ListNode} l2
 * @return {ListNode}
 */
var mergeTwoLists = function(l1, l2) {
    let result = new ListNode()
    let change = result
    
    while (l1 !== null && l2 !== null) {
        if (l1.val <= l2.val) {
            change.next = l1
            l1 = l1.next
        } else {
            change.next = l2
            l2 = l2.next
        }
        change = change.next
    }
    
    if (l1 !== null) { change.next = l1 }
    if (l2 !== null) { change.next = l2 }
    
    return result.next
    
};

解答方法


新しいノードリスト(result)を作成した後、変数(change)に割り当てます.
2つのリストを比較し、事前に作成した変数(change)に入れます.
アドレスの結果を参照します.nextを返します
let result = new ListNode()
let change = result
以上の手順では、現在のresultとchangeのアドレスが同じであることがわかります.
変われば結果も変わる.
change.next = l1
change.next = l2
change = change.next
その後、change参照のアドレス値は変更されますが、result参照のアドレス値は変更されないため、resultが返されます.
また、リストの生成時にresultを生成します.valは0に初期化されるのでresultです.nextを返します.