我的removeLast方法用于返回链表中的最后一个元素,然后返回它。这是我到目前为止所拥有的:

public int removeLast() {
    int x = getLast();
    removeLast(first);
    return x;
}

private void removeLast(Node n) {
    if (n == null) {
        throw new ListException("Empty list");
    } else {
        if (n.next == null) {
            n = null;
        } else {
            removeLast(n.next);
        }
    }
}


first = LinkedList类中的实例variabel

removeLast()成功返回了最后一个数字(getLast()确实正确地执行了此操作,然后应该实际上将removeLast(Node n)移除了它),但是该部分不起作用。

最佳答案

您没有将链接列表的最后一个节点正确设置为null。正如@Kevin Esche所说,
n = nulln设置为null,而不是链接列表的节点。在我的代码中,我使用link引用引用该节点并将其设置为null

这应该工作。

public int removeLast(Node n){  //returns and removes the last node

    int x = getLast();
    if(n == start && n.link == null) //list has only last node
        start = null;
    else {
        if(n.link.link == null)
            n.link = null;
        else
            x = removeLast(n.link);
    }
    return x;
}


从某处调用removeLast()方法时,将startfirst作为参数传递。

removeLast()调用main()

这是从main方法调用removeLast()方法的示例。

public static void main(String[] args){
    LinkedList ll = new LinkedList();
    /* add the nodes */
    System.out.println("The original LinkedList is");
    /* display the LinkedList */
    System.out.println("The last node is "+ll.removeLast(ll.start));
    System.out.println("After removing the last node, LinkedList is");
    /* display the current LinkedList */
}

09-15 23:15