【发布时间】:2020-09-07 16:44:15
【问题描述】:
class LinkedListNode {
constructor(value) {
this.value = value;
this.next = null;
}
}
let head = new LinkedListNode("head");
let x = [1, 1, 1, 1, 4, 10, 10, 3, 10, 9, 5, 5, 5, 8];
for (let ele of x) {
let y = new LinkedListNode(ele);
let pointer = head;
while (pointer.next != null) {
pointer = pointer.next;
}
pointer.next = y;
}
有人可以解释为什么以下“解决方案”会导致无限循环吗?
let removeDup = function(sll) {
let array = []
let pointer = sll;
while (pointer) {
if (array.includes(pointer.value)){
} else {
array.push(pointer.value);
sll.next = pointer;
sll = sll.next;
}
pointer = pointer.next;
}
}
看来如果我
let pointer = sll.next;
或
let array = [sll.value]
然后它工作正常,但如果我按原样运行它,则会导致无限循环。我可以看到为什么它可能会创建一个包含第一个值的 2 个重复项的链表,但我不明白为什么它会产生无限循环。或者,如果有人能指出我调试的正确方向,那也将不胜感激!
【问题讨论】:
-
sll.next = pointer;所以,用pointer = sll,然后你让下一个节点成为同一个节点。
标签: javascript algorithm infinite-loop singly-linked-list