2014-01-26 47 views
0

我一直在寻找各种职位,但我似乎无法弄清楚这一点 - 你如何插入一个元素到一个空的双向链表? (我无法想象一个空的DLL。)我想从文件中读取内容并将它们插入到DLL中,并且我还有一个方法来添加对象以帮助完成此操作。如何将第一个元素插入Java中的双向链表中

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()吗?谢谢您的帮助。

回答

0

你首先需要做一些像dll.setFirst(<some non-null object>)然后做最后一行。那里显然是null(因为你只是在if声明中测试了这个条件)。你不需要设置一些值到first,你需要先在这里实例化first

+0

我觉得这一行'dl.getFirst()的setValue(0);'(或类似的东西)不起作用,因为:'公共无效setValue方法(对象的newval) \t { \t \t值=的newval; \t}'和值为空,但'newVal'不是。这种方法不应该改变 - 你有什么想法如何去解决这个问题? – javaChipFrapp

0

您只需指向它的标头 header = new Node(null,currNum,null);

+0

在这种情况下,这是不可能的 - 唯一的方法就是我最初的编码方式。 (头文件由'.getFirst()'检索,其值由'.setValue()'设置)。例如,当然,'dll.getFirst()= first'不起作用。 – javaChipFrapp

+0

您不设置标题的值,您只需将其指向一个节点即可。所以你需要做的是.getFirst()= new Node(null,currNum,null); –