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

问题描述

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

{
   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)。在这里,您首先访问 data 变量的 curr 字段,然后检查 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: ");
        }
    }
}