Это односвязный список, и я хочу изменить его
Я нашел это в stackoverflow, но мне это не помогает
возвращает 1, а не [16,5,10,1]
Что я знаю об обратном связанном списке, так это
пусть первый узел указывает на ноль
второй узел указывает на первый узел
третий узел указывает на второй узел
Может ли кто-нибудь помочь мне понять, как изменить связанный список в моем коде?
Вот мой JS:
class LinkedList {
constructor(value) {
this.head = {
value: value,
next: null
};
this.tail = this.head;
this.length = 1;
}
append(value) {
const newNode = {
value: value,
next: null
}
this.tail.next = newNode;
this.tail = newNode;
this.length++;
return this;
}
prepend(value) {
const newNode = {
value: value,
next: null
}
newNode.next = this.head;
this.head = newNode;
this.length++;
return this;
}
printList() {
const array = [];
let currentNode = this.head;
while (currentNode !== null) {
array.push(currentNode.value)
currentNode = currentNode.next
}
return array;
}
insert(index, value) {
//Check for proper parameters;
if (index >= this.length) {
console.info('yes')
return this.append(value);
}
const newNode = {
value: value,
next: null
}
const leader = this.traverseToIndex(index - 1);
const holdingPointer = leader.next;
leader.next = newNode;
newNode.next = holdingPointer;
this.length++;
return this.printList();
}
traverseToIndex(index) {
//Check parameters
let counter = 0;
let currentNode = this.head;
while (counter !== index) {
currentNode = currentNode.next;
counter++;
}
return currentNode;
}
remove(index) {
// Check Parameters
const leader = this.traverseToIndex(index - 1);
const unwantedNode = leader.next;
leader.next = unwantedNode.next;
this.length--;
return this.printList();
}
reverse() {
let currentNode = this.head;
var previous = null;
while (currentNode) {
// save next or you lose it!!!
var save = currentNode.next;
// reverse pointer
currentNode.next = previous;
// increment previous to current node
previous = currentNode;
// increment node to next node or null at end of list
currentNode = save;
}
return this.printList()
}
}
let myLinkedList = new LinkedList(10);
myLinkedList.append(5)
myLinkedList.append(16)
myLinkedList.prepend(1)
myLinkedList.insert(2, 99)
myLinkedList.remove(2)
myLinkedList.reverse() //should return [16,5,10,1]


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


function reversesll(sll){
if (!sll.head || !sll.head.next) return sll;
var nodes=[],
current = sll.head;
//storing all the nodes in an array
while(current){
nodes.push(current);
current = current.next;
}
var reversedLL = new LinkedList();
reversedLL.head = nodes.pop();
current = reversedLL.head;
var node = nodes.pop();
//make sure to make next of the newly inserted node to be null
//other wise the last node of your SLL will retain its old next.
while(node){
node.next = null;
current.next = node;
current = current.next;
node = nodes.pop();
}
return reversedLL;
}
//create the LL
var sll = new LinkedList();
sll.push(1);
sll.push(2);
sll.push(3);
sll.push(4);
sll.push(5);
//test it
reversesll(sll);
//{head: {value:5, next:{value: 4, next: {value: 3, next: {value:2, next:{value:1, next: null}}}}}}
позвольте мне проверить еще раз
На самом деле вы довольно близки, после того, как ваш цикл просто переустановит голову и хвост:
while(/*...*/ { /*...*/ }
this.tail = this.head;
this.head = previous;
похоже, вы упускаете мою мысль. У меня уже была обратная функция в моем классе. Просто не создавайте новую