如何删除循环单链接列表上的最后一个节点

时间:2018-02-16 02:35:37

标签: java

我在删除最后一个节点时遇到问题。它将删除第二个而不是最后一个。

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个整数)。如果你需要我的整个代码。请问。感谢

1 个答案:

答案 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时抛出错误,你需要做一些边缘案例检查,但这应该让你开始

我们不能删除最后一个节点的原因是我们需要维护列表的循环属性