Java 删除循环链接列表中的第一个元素
我对循环链表的删除方法有问题。它只执行if语句。我做错了什么?如何解决此问题? 在循环链表中,您只需要跟踪指向最后一个元素的第一个元素Java 删除循环链接列表中的第一个元素,java,linked-list,circular-list,Java,Linked List,Circular List,我对循环链表的删除方法有问题。它只执行if语句。我做错了什么?如何解决此问题? 在循环链表中,您只需要跟踪指向最后一个元素的第一个元素 public void remove() { Node currNode = first; Node prevNode = null; if(first != null) { if(currNode.getNext() == first) { first = null; }
public void remove()
{
Node currNode = first;
Node prevNode = null;
if(first != null)
{
if(currNode.getNext() == first)
{
first = null;
}
}
else
{
prevNode = currNode;
currNode = currNode.getNext();
}
}
class Node
{
private int data;
private Node next;
public Node(int data, Node next) {
this.data = data;
this.next = next;
}
public int getData() {
return data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
是局部变量,因此在函数remove()之后,它们被删除,而您没有存储此值。每次调用remove()时,currNode和prevNode中都有一些值。因此,您应该将此变量用作类变量:
...
Node currNode = first;
Node prevNode = null;
public void remove()
{
if(first != null)
{
if(currNode.getNext() == first)
{
first = null;
}
}
else
{
prevNode = currNode;
currNode = currNode.getNext();
}
}
或者你应该使用currNode.setNext(…)而不是currNode=…我会做出一些假设,因为我不能发表评论 -您可以使用第一个节点访问循环链接列表,这意味着如果第一个节点不为null,则循环链接列表不为空 -其次,只有当链表非空时才调用remove()函数,因此从我的第一个假设来看,您无法访问else块 您的remove()逻辑不清楚 如果第一次调用remove()=空或链表在非空中检查第二个节点是否与第一个节点相同,然后删除对第一个节点的引用(first=null),意味着在没有将第二个节点指定为新的第一个节点(node)的情况下丢失链表。在我看来,你删除了整个链表,而不仅仅是第一个元素 现在,如果在空链表上调用remove()函数,即first=null
currNode= first //currNode = null
所以else块看起来像这样
prevNode=null;
currNode=null.getNext() //Null pointer Exception!!
上次我在循环链表中检查时,最后一个节点的下一个应该指向第一个节点,而不是第一个指向最后一个
PS如果我的任何假设是错误的,请发表评论,而不是投反对票:)能否请您分享节点的结构,以及“first”是什么?以及列表在空和非空时的结构规则。first是firstnode我怀疑
else
子句属于嵌套的If
,不是外面的。是的,我昨天看到了。已经修好了
prevNode=null;
currNode=null.getNext() //Null pointer Exception!!