不给定头时删除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,否则就访问不了。
我正在解决删除链表中间节点的问题。假设给定一个链表 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,否则就访问不了。