如何解决在 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 举报,一经查实,本站将立刻删除。