【问题标题】:Javascript alteration of memory of object when implementing deleting node in linked list在链表中实现删除节点时对象内存的Javascript更改
【发布时间】:2019-08-14 16:18:44
【问题描述】:

我需要一些关于 Javascript 中的内存是如何工作的指针。在我从链表尾部删除第 n 个节点的实现中,我有一个占位符 resultHead。

在代码的最后,我有控制台记录 resultHead 并且第一次只是 head 的原始分配:

{"val":1,"next":{"val":2,"next":{"val":3,"next":{"val":4,"next":{"val ":5,"next":null}}}}}

但是第二次后我有这行:

slow.next = slow.next.next

然后控制台退出:

{"val":1,"next":{"val":2,"next":{"val":3,"next":{"val":5,"next":null}} }}

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @param {number} n
 * @return {ListNode}
 */
var removeNthFromEnd = function(head, n) {
    if(head.next === null){return null}
    // use resultHead as a place holder and its next is the actual head
    let resultHead = new ListNode(null);
    resultHead.next = head;
    // find the difference between fast and slow pointer
    let fast = resultHead; 
    let slow = resultHead; 
    for(let i=0; i<=n; i++){
        fast=fast.next;

    }

    while(fast){
        slow = slow.next
        fast = fast.next   
    } 
    console.log(JSON.stringify(resultHead.next))
    slow.next = slow.next.next
    console.log(JSON.stringify(resultHead.next))
    return resultHead.next;
};


removeNthFromEnd({"val":1,"next":{"val":2,"next":{"val":3,"next":{"val":4,"next":{"val":5,"next":null}}}}}, 2)

所以代码应该删除带有node.val = 4的节点

slow.next = slow.next.next如何改变resultHead的值?

我还尝试在不同的位置控制台记录resultHead,但仅在slow.next = slow.next.next 更改resultHead 的值之后。

【问题讨论】:

    标签: javascript javascript-objects singly-linked-list


    【解决方案1】:

    请记住,javascript 通过引用传递对象。 resultHead.next = head 表示修改 resultHead.next 从外部修改 head。你为 resultHead 设置了 slow 和 fast ,所以修改 slow.next 会修改 head。

    slow === resultHead
    resultHead.next === head
    slow.next === head
    

    【讨论】:

    • 好的,当我设置 slow=slow.next 时,while 循环中会发生什么。它不是将慢速变量设置为指向不同的对象(列表中的下一个节点)吗?循环结束后,它将在 node.val=3 处结束,现在slow 会在resultHead 中获取节点引用吗?
    猜你喜欢
    • 2022-01-24
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多