实现删除链表中的节点时,Javascript改变对象的内存

标签 javascript javascript-objects singly-linked-list

我需要一些关于 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 通过引用传递对象。 resultHead.next = head 表示修改 resultHead.next 会从外部修改 head。您将 resultHead 设置为 Slow 和 Fast,因此修改 Slow.next 会修改 head。

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

关于实现删除链表中的节点时,Javascript改变对象的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55320611/

相关文章:

java - 从 LinkedList 索引处删除一个元素

c - 如何释放我的单链表程序?

javascript清除复选框上的输入表单值取消选中

javascript - Trip Advisor Widget 在我的网站上不起作用

javascript - 使用 fnAdjustColumnSizing 时,数据表的大小未调整

javascript - 是未定义还是未定义?

javascript - handlebars - 如何访问子数组的第一个元素?

javascript - new F 和 new F() 有什么不同吗?

javascript - 特定对象实例的自定义函数 - 我有什么可能性?

在线性时间内创建队列链表