不给定头时删除Java链表的最后一个节点

Delete Last node of Linked List in Java when the head is not given

我正在解决删除链表中间节点的问题。假设给定一个链表 a->b->c->d->e 你想删除 b/c/d 并且没有给出 LinkedList 的头部。

    public boolean deletemiddle(LinkedListNode node) {
        if(node==null)
            return false;
        LinkedListNode n=node;
        node.data=n.next.data;
        node.next=n.next.next;
        return true;
    }

这行得通。但是如果我想删除最后一个节点e怎么办?我知道我们可以在 c/c++ 中通过手动释放分配的 space 来做到这一点,但是否可以在 Java 中做到这一点? 我确实尝试为该值分配一个空值,但这似乎不起作用

if(node.next==null) {
        LinkedListNode dummynode=null;
        node=dummynode;
        return true;
    }

如果我理解你的问题是正确的,你可以通过将前一个节点的.next 属性设置为空来删除最后一个节点。 如果您的节点包含属性 .previous,您可以使用它。 所以

if(node.next==null) {
        node.previous.next = null;
        return true;
}

如果没有previous属性,则需要检查每个节点下一个节点是否为结束节点。所以

if(node.next != null && node.next.next == null){
       node.next = null;
       return true;
}

我希望这能回答你的问题。

不,这是不可能的。您确实需要对前面节点的引用,以便更新其 next 引用。双向链表提供了这样的反向引用,但是当你说到单向链表时,函数必须以其他方式获得对前面节点的引用。

I know we can do this in c/c++ by manually freeing the space allocated

这还不够。在 C/C++ 中,您还需要将前一个节点的 next 指针设置为 NULL/nullptr,否则您将得到未定义的行为。在 C++ 中唯一可以做更多的事情是通过引用.

传递前一个节点的 next 指针

但是无论你怎么做,函数都必须能够访问前面节点的next pointer/reference,否则就访问不了。