我如何在Java的双向链接列表中删除两个节点

问题描述 投票:0回答:1

我在双向链表中有问题,我不使用尾巴,而使用电流,认为有不同之处,因为当我使用尾巴时,我没有发现问题,但是在电流下,我发现了这个问题,而当我无法解决问题时,我想删除我的程序正在运行的节点,但是现在发现这个错误,我无法删除下一个节点

此类DNode

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

此类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
 }

我的评论是问题

java doubly-linked-list
1个回答
0
投票

在删除功能的else部分中,将电流分配给tmp。当您说current = tmp;时,tmp可能为空。因此,下次调用remove时,如果它输入else子句(在您的情况下如此),当前将为null,并且current.next给出null指针异常。

© www.soinside.com 2019 - 2024. All rights reserved.