递归调用中的Javascript按引用传递问题
我正在做反向链接列表问题,但它没有正常运行,因为我认为这是因为javascript如何在递归调用中的Javascript按引用传递问题,javascript,debugging,recursion,pass-by-reference,pass-by-value,Javascript,Debugging,Recursion,Pass By Reference,Pass By Value,我正在做反向链接列表问题,但它没有正常运行,因为我认为这是因为javascript如何在reversedLL.next=new Node(ll.data)的同时更改我的head对象因此链表链接不会在头部持久化。当我修改reversedLL时,是否有什么方法可以使head保持不变?我假设您需要将列表反转到位- 功能反转(ll) {if(ll==null)返回 设p=null 设q=ll while(q) {p={data:q.data,next:p} q=q下一步 } ll.data=p.dat
reversedLL.next=new Node(ll.data)的同时更改我的head
对象代码>因此链表链接不会在头部持久化。当我修改reversedLL
时,是否有什么方法可以使head
保持不变?我假设您需要将列表反转到位-
功能反转(ll)
{if(ll==null)返回
设p=null
设q=ll
while(q)
{p={data:q.data,next:p}
q=q下一步
}
ll.data=p.data
ll.next=p.next
}
const mylist={data:1,next:{data:2,next:{data:3,next:null}}
反向(mylist)
console.log(JSON.stringify(mylist))
reversedLL
与head
Oh是同一个对象,而且在reverse
函数中更新reversedLL
不会在调用环境中更改它。JavaScript没有传递引用。是的,但由于某种原因,在执行此操作后,reversedLL
应指向最后一个节点,head
应指向第一个节点。但是,head
指向与reversedLL
相同的节点。同样,如果reversed
语句更改了reversed
上下文中的局部变量reversedLL
,则在语句末尾对reversedLL
的赋值。它对调用上下文中的reversedLL
变量没有影响。我想我已经找到了它失败的原因,reversedLL
对象没有在调用堆栈中持久化,所以我必须在递归调用reversedLL=reverse(ll.next,reversedLL)中返回它代码>
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;
}
}