我在删除最后一个节点时遇到问题。它将删除第二个而不是最后一个。
public Node removeLast() {
if (isEmpty()) {
throw new NoSuchElementException();
}
Node temp = first.next;
if (last.next == last) {
first = null;
} else {
first.next = temp.next;
}
temp.next = null;
length--;
return temp;
}
"第一"是前一个节点。当我宣布它。我将最后一个节点指向最后一个整数,将第一个节点指向第四个整数。 (我有5个整数)。如果你需要我的整个代码。请问。感谢
答案 0 :(得分:0)
要删除最后一个,我们需要对倒数第二个节点的引用。这样,我们可以简单地使倒数第二个节点指向第一个节点,并将最后一个节点更新为最后一个节点。 Java垃圾收集将负责其余的
public Node removeLast() {
if (isEmpty()) {
throw new NoSuchElementException();
}
Node temp2 = first;
Node temp = first.next;
while(temp.next != null) {temp2 = temp; temp = temp.next;}
//now temp 2 should be pointing to the SECOND LAST node
temp2.next = first; //now the second last node points at the first
last = temp2; //our new last node
/*Take care of counters and returns here*/
}
这段代码不会编译,并会在列表长度为1时抛出错误,你需要做一些边缘案例检查,但这应该让你开始
我们不能删除最后一个节点的原因是我们需要维护列表的循环属性