我正在尝试从linkedList中删除最后一个节点并将其返回。这是Linkedlist类的一部分。我写的以下方法不会删除最后一个节点。有人知道为什么吗?
public int delete(){
if(front==null){
throw new NoSuchElementException();
}else{
ListNode current = front;
while(current.next!=null){
current = current.next;
}
int delete = current.data;
current = null;
return delete;
}
}
答案 0 :(得分:3)
将current
设置为null只会将引用更改为null。它决不会影响链表数据结构。您需要找到倒数第二个节点并将其下一个指针设置为null:
int data = secondToLastNode.next.data;
secondToLastNode.next = null;
return data;
当然,您需要处理列表中只有一个节点的情况,上面的代码没有考虑到这一点。
答案 1 :(得分:2)
您只需将本地参考current
设置为null
;你没有改变你的清单。
假设这是一个单独的链接列表,您需要将倒数第二个ListNode
的{{1}}设置为next
(或将null
设置为{ {1}}如果它是唯一的项目。)
答案 2 :(得分:2)
您需要涵盖三种情况:
front
将具有值,但front.next
将为null
。在这种情况下,您应该将front
设置为null
。next
设置为null
。你还没有设法做到这一点。答案 3 :(得分:0)
我最后解释了here。
Jave是一种传递引用语言,=
重新分配引用。您只需要更改本地参考,请参阅上面链接中的示例代码并了解它。
答案 4 :(得分:0)
在具有空指针的那个之前记住'current',并将该节点的'next'指针设置为null。这样,您删除对最新节点的引用,而不是仅更新本地变量。
答案 5 :(得分:0)
尝试这个
public int delete(){
if(front==null){
throw new NoSuchElementException();
} else if(front.next===null){
return front.data;
}else{
ListNode current = front;
while(current.next.next!=null){
current = current.next;
}
int deleted_node = current.next.data;
current.next = null;
return deleted_node;
}
}