簡體   English   中英

在 java 中刪除雙向鏈表中的兩個節點時出錯

[英]Error while removing two nodes in doubly linked list in java

我在雙重 LinkedList 中遇到問題,我沒有使用尾部,而是使用當前指針。 當我使用尾部時,我沒有發現問題,但是當我使用當前指針時,我得到一個錯誤並且我無法解決它。 當我刪除一個節點時會發生這種情況。 我的程序正在運行,但我無法刪除下一個節點。 這是錯誤消息:

這是 class DNode

public class DNode<T> { 
 T data;
 DNode<T> next;
DNode<T> prev;
public DNode(T e){
 data = e;
    next = prev = null;
}

此 class DoubleLinkedList

public class DoubleLinkedList<T> {

DNode<T> head;
DNode<T> current;
int size = 0;
public DoubleLinkedList() {
    head = current = null;
}
public void Insert(T e) {
    DNode<T> tmp = new DNode(e);
    if (size == 0) {
        head = current = tmp;
    } else {
        tmp.next = current.next;
        tmp.prev = current;
        current.next = tmp;
        current = tmp;

    }
    size++;
}

public void remove() {
    if (head == current) {
        if (current.next == null) {
            head = current = null;
        } else {
            current.next.prev = null;
            head = current.next;
            current.next = null;
            current = head;
        }
    } else {
        DNode<T> tmp = current.next;

        current.prev.next = tmp;
        if (tmp != null) {
            tmp.prev = current;
        }
        current.next = current.prev = null;
        current = tmp;
    }

    size--;

}

主課

public static void main(String[] args) {
DoubleLinkedList<String> d = new DoubleLinkedList();


  d.Insert("jon");
    d.Insert("jack");
    d.Insert("mohammed");
    d.remove();
    d.remove();// here my problem
 }

帶有注釋的行是我收到錯誤的地方。

在刪除 function 的 else 部分中,將電流分配給 tmp。 當你說current = tmp; tmp 可能是 null。 因此,下次調用 remove 時,如果它進入 else 子句(在您的情況下),當前將為 null,並且current.next給出 null 指針異常。

編輯:這將是一個可能的建議:

/*Deletes the last node in the list*/
public void remove() {
  if(head == null || size == 0) return; // Empty list
  if(head == current || size ==1){    // List with only one node
    head = null;
    current = null;
    size--;
    return;
  }
  DNode<T> previous = current.prev;
  previous.next = current.next;
  current.prev = null;
  current = previous;
    size--;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM