我在循环链表的删除方法上遇到麻烦。它仅执行if语句。我究竟做错了什么?如何解决此问题?
在循环链接列表中,您只需要跟踪指向最后一个元素的第一个元素
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;
}
}
最佳答案
Node currNode = first;
Node prevNode = null;
是局部变量,因此在函数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(...) instead of currNode = ...