问题描述
不确定函数 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;