java - 删除链表中的节点

标签 java nodes doubly-linked-list

现在尝试通过索引删除节点。我想打印出带有索引的节点列表,以便用户可以选择所看到的索引。我认为我的逻辑可以用索引打印列表,但没有输入输出:(

在玩弄这个的过程中,我仍然无法打印节点列表,但输出了“在您想要删除的索引中输入”,并且能够接受用户的选择,但最终得到了 NullPointerException 。

            else if (menu.equals("d")) {
            EntryNode temp = head;
            while (temp != null) {
                for (int i = 0; i < addressBook.length(); i++) {
                    //gets node at index
                    System.out.println(temp.getFirstName() + i);
                    temp = temp.getNext();
                }
            System.out.println(" ");
            System.out.println("Please enter the index of the entry you wish to delete ");
            int index = keyboard.nextInt();
            addressBook.removeEntry(index);
            }

        }

去除方法: 公共(public)无效removeEntry(int索引){

    //delete from the head
    if (index == 0) {
        EntryNode temp = head;
        head = temp.getNext();
        temp.setNext(null);
        head.setPrev(null);
        size--;
    }
    //delete from the tail
    else if (index == length()) {
        EntryNode temp = tail;
        temp.setPrev(null);
        tail.setNext(null);
        tail = temp.getPrev();

        size--;
    }
    //in the middle
    else {
        EntryNode temp = head;
        for (int i = 0; i < index; i++) {
            //gets node at index
            temp = temp.getNext();
        }
        //set node after temp's previous to temp's previous 
        temp.getNext().setPrev(temp.getPrev());
        temp.getPrev().setNext(temp.getNext());
        temp.setNext(null);
        temp.setPrev(null);
        size--;
    }
}

NullPointerException 来自:

//set node after temp's previous to temp's previous 
temp.getNext().setPrev(temp.getPrev());

最佳答案

在调用 setPrev() 之前,您应该检查 temp.getNext() 是否不为 null

此外,您应该检查 length()-1 因为您的节点索引为零。

关于java - 删除链表中的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9636699/

相关文章:

java - 我应该应用多少测试来测试双向链表?

c++ - 删除 std::list 中的项目,同时保留分配的项目

java - 将 WSDL 文件写入现有 Web 服务

java - 插入数据的唯一约束错误

javascript - 从 ionic 项目中的 typescript 调用 javascript 函数

c++ - 带链表的哈希表,重复节点仍在保存(C++)

c++ - 如何删除双向链表数据并返回?

java - 如何根据两个值过滤arraylist

无法创建单向链表

c - 如何使用malloc在链表中插入节点?