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

问题描述 投票:0回答:1

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

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

{ “VAL”:1, “下一个”:{ “VAL”:2 “下一个”:{ “VAL”:3, “下一个”:{ “VAL”:4, “下一个”:{ “VAL”:5 , “下一步”:空}}}}}

但是我有这条线之后的第二次:

slow.next = slow.next.next

然后控制台注销:

{ “VAL”:1, “下一个”:{ “VAL”:2 “下一个”:{ “VAL”:3, “下一个”:{ “VAL”:5, “下一个”:空}}}}

/**
 * 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个回答
2
投票

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

slow === resultHead
resultHead.next === head
slow.next === head
© www.soinside.com 2019 - 2024. All rights reserved.