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

在 JavaScript 中反转链接列表会覆盖 this.head 并且不会更新

如何解决在 JavaScript 中反转链接列表会覆盖 this.head 并且不会更新

不确定函数 reverseLinkedList 中出现了什么问题。

我正在尝试反转链接列表,我采取的步骤似乎适用于 leetcode/hackerrank 等在线评委。当然创建Link List的时候认的结构是不一样的。

class Node{
  ...
}


class LinkedList{
  constructor(){
    this.head = null;
    this.size = 0;
  };
    
  insert(data){
    this.head = new Node(data,this.head);
    this.size++;
  };

  printElements(){
    let current = this.head;
    while(current){
      console.log(current.data)
      current = current.next;
    }
  };

  reverseLinkedList(){
    let prev = null;
    let current = this.head;
    let temp;
    while(current){
        temp = current.next;
        current.next = prev;
        prev = current;
        current = temp;
    }
  }
}

const ll = new LinkedList();

ll.insert(1);
ll.insert(12);
ll.insert(6);

ll.reverseLinkedList();

ll.printElements();

尝试通过 leetcode/hackerrank 解决同样的问题,效果很好。顺便说一句,我不确定为什么会发生这种情况。

解决方法

您没有将新的 .head 设置为以前的最后一个节点:

reverseLinkedList() {
  let prev = null;
  let current = this.head;
  while (current) {
    const temp = current.next;
    current.next = prev;
    prev = current;
    current = temp;
  }
  this.head = prev;
//^^^^^^^^^^^^^^^^^
}
,

最后你的 head 应该指向 prev,所以当你迭代链表时,它从 prev 开始(作为新的 head)在循环结束时添加下面的代码。

this.head = prev;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。