【发布时间】:2021-07-09 02:12:20
【问题描述】:
const reverseLinkedList = (ll) => {
const head = new Node();
const reversedLL = head;
reverse(ll, reversedLL);
return head.next;
}
const reverse = (ll, reversedLL) => {
if (ll) {
reverse(ll.next, reversedLL);
reversedLL.next = new Node(ll.data);
reversedLL = reversedLL.next;
}
}
我正在做反向链表问题,但它没有正常运行,因为我相信这是因为 javascript 如何同时更改我的head 对象和reversedLL.next = new Node(ll.data);,所以链表链接不会持续存在头部。有什么办法可以让head 在我修改reversedLL 时不会改变?
【问题讨论】:
-
reversedLL与head是同一个对象 -
哦,在
reverse函数中更新reversedLL也不会在调用环境中改变它。 JavaScript 没有传递引用。 -
是的,但是由于某种原因,在此执行之后,
reversedLL应该指向最后一个节点,head应该指向第一个节点。但是head指向与reversedLL相同的节点。 -
同样,在
if语句末尾对reversedLL的赋值改变了reverse上下文中的local 变量reversedLL。它对调用上下文中的reversedLL变量没有影响。 -
我想我知道为什么它失败了,
reversedLL对象没有保留在调用堆栈中,所以我不得不在递归调用中返回它reversedLL = reverse(ll.next, reversedLL);
标签: javascript debugging recursion pass-by-reference pass-by-value