【问题标题】:How to insert the first element in a doubly linked list in Java如何在Java中的双向链表中插入第一个元素
【发布时间】:2014-01-26 21:05:15
【问题描述】:

我一直在查看各种帖子,但我似乎无法弄清楚 - 如何将元素插入到空的双向链表中? (我无法想象空的 DLL。)我想从文件中读取内容并将它们插入到 DLL 中,并且我还有一种添加对象的方法来帮助解决这个问题。

public void add(ListNode prev, Object object, ListNode next){
    ListNode newNode = new ListNode(prev, object, next);
    prev.setNext(newNode);  
    newNode.setPrevious(prev);
    newNode.setNext(next);
    next.setPrevious(newNode);
}

在我读取对象并插入它们的方法中,

int currNum = scanner.nextInt();
DoublyLL dll = new DoublyLL();
ListNode curr = dll.getFirst(); //start at beginning of list
ListNode prev = null;

if(curr == null){   //if the list is empty
    ListNode first = new ListNode(curr, currNum, null);
    dll.getFirst().setValue(first); //returns a null-pointer exception
}

最后一行产生了一个空指针异常。那么如何插入第一个元素呢?你使用 add() 吗?感谢您的帮助。

【问题讨论】:

    标签: java doubly-linked-list


    【解决方案1】:

    您首先需要执行dll.setFirst(<some non-null object>) 之类的操作,然后执行最后一行。显然是null 那里(因为您刚刚在if 语句中测试了这种情况)。你不需要给first设置一些值,你需要先在这里实例化first

    【讨论】:

    • 我认为这条线dl.getFirst().setValue(0);(或类似的东西)不起作用,因为:public void setValue(Object newVal) { value =newVal; } 并且值为空,尽管newVal 不是。这种方法不应该改变 - 你知道如何解决这个问题吗?
    【解决方案2】:

    您只需将标题指向它 header=新节点(null,currNum,null);

    【讨论】:

    • 在这种情况下这是不可能的 - 唯一的方法是我最初编码的方式。 (标头由.getFirst() 检索,其值由.setValue() 设置。)因此,例如,dll.getFirst() = first 当然不起作用。
    • 您不设置标头的值,您只需将其指向一个节点。所以你需要做的是 .getFirst()=new Node(null,currNum,null);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多