Java 如何使用双链表在另一个节点之后插入一个节点?

Java 如何使用双链表在另一个节点之后插入一个节点?,java,data-structures,linked-list,Java,Data Structures,Linked List,我想在双链接列表中的另一个节点之后插入一个节点,但当我提供链接列表中不存在的键时,此方法会给我一个错误。我应该如何修复此错误?这是我的密码。提前谢谢 { public void AddAfter(int insertAfter, int data) { DLNode n = new DLNode(data); DLNode curr = head; if(head == null) head = n; else { whil

我想在双链接列表中的另一个节点之后插入一个节点,但当我提供链接列表中不存在的键时,此方法会给我一个错误。我应该如何修复此错误?这是我的密码。提前谢谢

{
   public void AddAfter(int insertAfter, int data) 
   {
   DLNode n = new DLNode(data);
   DLNode curr = head;
   if(head == null)
       head = n;
   else
   {
       while(curr.Data != insertAfter && curr != null) 
       {
           curr = curr.next;
       }
       if(curr != null) 
       {
           n.next = curr.next;
           n.prev = curr;
           n.next.prev = n;
           curr.next = n;
           NumNodes++;
           
           
       }
       else
           System.out.println("The Key "+insertAfter+" doesn't exist: ");
   }
  }
}
。。。但是当我提供了一个链表中不存在的键时,这个方法会给我一个错误

问题出现在while循环条件中(例如,
curr.Data!=insertAfter&&curr!=null
)。在这里,首先访问
curr
变量的
data
字段,然后检查
curr
是否为空

我应该如何修复此错误

你需要按相反的顺序做。下面的代码应该可以解决您的问题

public void AddAfter(int insertAfter, int data) {
    DLNode n = new DLNode(data);
    DLNode curr = head;
    
    if(head == null) {
        head = n;
    }
    else {
        while(curr != null && curr.Data != insertAfter) {
            curr = curr.next;
        }
        if(curr != null) {
            n.next = curr.next;
            n.prev = curr;
            n.next.prev = n;
            curr.next = n;
            NumNodes++;
        }
        else {
            System.out.println("The Key "+insertAfter+" doesn't exist: ");
        }
    }
}

到底是什么错误?我们知道的越多,对我们来说就越容易。包括调用和输出,可能还应该包括列表的完整源代码。作为附加主题:如果没有匹配的insertAfter值,while循环将导致curr=null。因此,将您的检查重写为
while(curr!=null&&curr.Data!=insertAfter)
以便首先检查curr是否为null,这样
curr.Data
将不会抛出NPE。抱歉,我没有得到它。你想说什么?