我在循环链表的删除方法上遇到麻烦。它仅执行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 = ...

08-16 20:12