用于删除和 return Linked 列表中的最后一个 Link 的代码有什么问题?

Whats wrong with this code used to delete and return the last Link in a Linked List?

public Link getEnd(LinkList a, Link current){       

    if(current.next == null){

        Link temp = current; //here I save the Link in a variable before nullifying it
        current = null;

        return temp;
    }
    else{
        getEnd(a , current.next);
    }
    return null;
}

我正在为 LinkedList 使用 class,它是专门为我正在参加的 CS 课程编写的,所以如果语法与你的不一样,请记住这一点习惯了。
这里发生的是我得到一个空指针异常,列表中的最后一个 Link 是相同的,没有任何反应。

声明:

current = null;

更改局部变量的值,而不是列表结构。完全没有效果。

如前所述,current 是一个 local 变量。更改它没有任何作用。

您想修改倒数第二个元素,然后

secondlast.next = null;

取消链接最后一个元素。此外,Java 不允许您引用 current.next 字段 ,只能复制引用。在 C 中,这样的代码可以写得更短,但这需要成熟的指针操作。

所以你确实需要修改你的整体逻辑来向前看多一个元素。最简单的可能是将您的方法设计为

public Link getEnd(LinkedList a, Link previous, Link current) {
    ...
    if (previous != null) previous.next = null;
    ...
    else
    ...
    return getEnd(a, current, current.next);
}

但是,我建议使用非递归实现。

public Link getEnd(LinkedList a) {
    if (a.head == null) return null; // Empty list.
    Link previous = null, current = a.head;
    while(current.next != null) {
        previous = current;
        current = current.next;
    }
    // Figure out what to do now yourself. It's easy.
}