如何解决递归调用中的 Javascript 通过引用问题
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
不会改变?
解决方法
我假设您需要reverse
准备好列表 -
function reverse(ll)
{ if (ll == null) return
let p = null
let q = ll
while (q)
{ p = {data: q.data,next: p}
q = q.next
}
ll.data = p.data
ll.next = p.next
}
const mylist = {data: 1,next: {data: 2,next: {data: 3,next: null}}}
reverse(mylist)
console.log(JSON.stringify(mylist))
{data: 3,next: {data: 1,next: null}}}
但是你用递归标记了这个问题,所以也许你想创建一个反向副本?
function reverse(ll,p = null)
{ if (ll == null)
return p
else
return reverse(ll.next,{data: ll.data,next: p})
}
const mylist = {data: 1,next: null}}}
const revList = reverse(mylist)
console.log(JSON.stringify(revList))
console.log(JSON.stringify(mylist))
{data: 3,next: null}}}
{data: 1,next: null}}}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。