微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

递归调用中的 Javascript 通过引用问题

如何解决递归调用中的 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); 对象,因此链表链接不是坚持在头上。有什么我可以做的,以便在我修改 headreversedLL 不会改变?

解决方法

我假设您需要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 举报,一经查实,本站将立刻删除。