#javascript #data-structures
#javascript #структуры данных
Вопрос:
Не уверен, что здесь происходит не так в функции reverseLinkedList .
Я пытаюсь изменить список ссылок, и шаги, которые я предпринял, похоже, работают у онлайн-судей, таких как leetcode / hackerrank. Конечно, структура по умолчанию отличается при создании списка ссылок.
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, и это работает нормально. Кстати, я не совсем понимаю, почему это происходит.
Ответ №1:
Вам не хватает, чтобы установить новый .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;
//^^^^^^^^^^^^^^^^^
}
Ответ №2:
В конце ваш заголовок должен указывать на предыдущий, поэтому, когда вы повторяете связанный список, он начинает формировать предыдущий (как новый заголовок), добавьте приведенный ниже код, когда цикл закончится.
this.head = prev;