首页 > 解决方案 > Java - 双链表实现

问题描述

我正在学习数据结构。所以我正在尝试实现doubly linked list in Java.我正在尝试实现 insertAtAnyPosition方法

使用这种方法,我可以在任何指定的索引处插入值。

public class DoublyLinkedList {

    Node head = null;

    public void insert(int data) {
        Node node = new Node();
        node.data = data;
        node.next = null;

        if(head == null)
            head = node;
        else {
            Node n = head;
            while(n.next != null  ) {
                n = n.next;
            }
            n.next = node;
            node.previous = n.next;
        }
    }

    public void insertAtStart(int data) {

        Node node = new Node();
        node.previous = null;
        node.data = data;

        head.previous = node;
        node.next = head;
        head = node;
    }

    public void insertAtAnyPosition(int index, int data) {
        Node node = new Node();
        node.data = data;

        Node n = head;

        for (int i = 0; i < index-1; i++) {
            n = n.next;
        }
        Node n1 = n.next.previous;

        node.previous = n1;
        node.next = n.next;
        n.next = node;
        n1 = node;

    }

    public void display() {
        Node n = head;

        while(n.next != null) {
            System.out.println(n.data);
            n = n.next;
        }
        System.out.println(n.data);
    }

}

节点类

public class Node {

    int data;
    Node next;
    Node previous;
}

主要方法

public static void main(String[] args) {
        // TODO Auto-generated method stub

        DoublyLinkedList list = new DoublyLinkedList();

        list.insert(12);
        list.insert(4);
        list.insert(1);
        list.insert(30);
        list.insertAtAnyPosition(4,100); // Null Pointer Exception thrown when trying to insert at 4th Index.
        list.display();

    }

"Null Pointer Exception"当我尝试在4th Index. 并且在这一行中引发了异常Node n1 = n.next.previous; 但是上面的代码有效,当我尝试在索引处插入元素1,2,3而不是在 4 中插入元素时。谁能帮我解决这个问题?

标签: javadata-structures

解决方案


罪魁祸首是 n.next.privious ,它一定会为您造成空指针异常

public void insertAtAnyPosition(int index, int data) {
        Node node = new Node();
        node.data = data;

        Node n = head;

        for (int i = 0; i < index-1; i++) {
            n = n.next;
        }
        Node n1 ; 
        if(n.next== null){
.       n1 = n;
}else{
       n1 =n.next.previous;
}
        node.previous = n1;
        node.next = n.next;
        n.next = node;
        n1 = node;

推荐阅读