[英]Reverse a linked list… what is wrong with my implementation?
根據下面的實現,我無法反轉鏈接列表。 我在這里做錯了什么或遺漏了什么嗎?
class Node {
constructor(val) {
this.val = val;
this.next = null;
}
}
class SinglyLinkedList {
constructor() {
this.head = null;
this.length = 0;
}
push(val) {
var newNode = new Node(val);
var current = this.head;
if (!this.head)
this.head = newNode;
else {
// iterate to the end of the
// list
while (current.next) {
current = current.next;
}
// add node
current.next = newNode;
}
this.length++;
return this;
}
// reverse the list
reverse() {
var prev = null;
var curr = this.head;
while (curr !== null) {
var temp = curr.next;
curr.next = prev;
prev = curr;
curr = temp;
}
return this;
}
print() {
var arr = []
var current = this.head;
while(current) {
arr.push(current.val);
current = current.next;
}
console.log(arr);
}
}
這是我創建 object 並推送一些節點時的實現
var list = new SinglyLinkedList();
list.push(1);
list.push(2);
list.push(3);
list.push(4);
每次我運行list.reverse()
然后list.print()
它只打印[1]
而不是[4,3,2,1]
。
您正確地反轉了節點之間的鏈接,但您永遠不會更改this.head
指向的內容,因此它現在指向列表的末尾而不是列表的前面。 因此,當您調用 print 時,打印將從最后一個節點開始,然后無處可至 go。
reverse() {
var prev = null;
var curr = this.head;
while (curr !== null) {
var temp = curr.next;
curr.next = prev;
prev = curr;
curr = temp;
}
this.head = prev; // <--- added
return this;
}
您尚未在reverse
方法中更新head
屬性。 只需添加this.head = prev;
在while
循環之后,我相信它應該可以工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.