根据值从链表中删除节点



我正在解决Hackerrank问题,我正在尝试删除所有大于特定值的节点。

这是他们的基本实现

const SinglyLinkedListNode = class{
constructor(value) {
this.value = value;
this.next = null;
}
};
const SinglyLinkedList = class {
constructor() {
this.head = null;
this.tail = null;
}
insertNode(value) {
const node = new SinglyLinkedListNode(value);
if(!this.head) {
this.head = node;
} else {
this.tail.next = node;
}
this.tail = node;
}
};

我删除节点的功能如下...

SinglyLinkedList.prototype.removeNodes = function(listHead, x){
let currentNode = listHead;
while(currentNode !== null && currentNode.next !== null) {
let next = currentNode.next;
while (next !== null && next.value > x) {
next = next.next
}
currentNode.next = next
if(currentNode.next === null) {
break;
}
}
return currentNode
}

参数包括:listhead - 对根节点的引用,x - 用于过滤链表的整数值

例如,LL 是 1-> 2 -> 4 -> 3-> 5,我需要删除所有大于 x (3( 的节点并保持 LL 顺序的完整性。 结果应为 1 -> 2 -> 3。

我对为什么我一直得到这个.tail.value = 5而不是 this.tail.value = 3, this.tail.next = null。

这是一个 REPL

因为必须显式重写tail,否则它会保留对未链接节点的引用。在运行函数之前,列表如下所示:

list: head                                   tail
1    ->    2   ->    3  ->    4    ->  5

之后尾巴仍然指向 5,尽管这是未链接的:

list: head                                  tail
1    ->    2   ->    3             5

要解决此问题,只需重写函数末尾的尾部:

return this.tail = currentNode;

此外,您还必须实际遍历列表,因此请添加一个

currentNode = currentNode.next;

在外while的尽头.

相关内容

  • 没有找到相关文章

最新更新