2014-10-26 33 views
0

我试图将项目添加到双链表中,并且试图通过比较其字符串以正确顺序添加它们。在双向链表中之前/之后添加对象的问题

public boolean add(Book book) 
{ 
    Node current = new Node(book); 

    if(firstNode == null) 
    { 
     firstNode = current; 
     lastNode = current; 
     numElements++; 
     return true; 
    } 


    else 
    { 
     Node tempNode = firstNode; 
     int val = -1; 
     while(tempNode != null) 
     { 
      if(tempNode.bookElement.compareTo(book) > 0) 
      { 
       val = 1; 
       break; 
      } 

      else if(tempNode.bookElement.compareTo(book) == 0) 
        return false; 
      else 
      { 
       val = -1; 
       tempNode = tempNode.next; 

      } 
     } 


      if(val > 0) 
      { 
       System.out.println("next: " + tempNode.bookElement.getISBN()); 

       current.next  = tempNode; 
       if(tempNode == firstNode) 
        tempNode.previous = current; 


       if(current.previous == null) 
        firstNode = current; 

       numElements++; 

       return true; 
      } 


      else 
      { 
       current.previous = tempNode; 
       tempNode.next  = current; 
       lastNode   = current; 
       numElements++; 
       return true; 
      } 


    } 

} 

,这里是如何我加入的对象:

Book[] books = new Book[4]; 
    books[0]  = new Book("a", "charles g", "book1"); 
    books[1]  = new Book("b", "michael b", "book2"); 
    books[2]  = new Book("c", "james k", "book3"); 
    books[3]  = new Book("d", "gsdgsdgg g", "book4"); 


    BookList booklist = new BookList(); 
    booklist.add(books[0]); 
    booklist.add(books[1]); 
    booklist.add(books[2]); 
    booklist.add(books[3]); 

的对象是使用String的compareTo第一个参数,即 “A” 或 “B”

比较

目前,如果我切换顺序,即“a”=“d”,“b”=“c”等,我可以得到清单以正确排序,但如果我按照现在的方式保留它,并尝试排序我得到一个空指针:

tempNode.next  = current; 

如果我行

while(tempNode != null) 

while(tempNode.next != null) 

则列表排序,以便我可以把它作为A,B,C,d。但我希望能够正确地对它进行排序,而不管我添加它们的顺序如何,所以我认为在添加它们的方式上存在非常错误的地方。

编辑:

我得到的列表中添加向后所以加入d,C,B,如预期,因为它是不检查的同时,块的if语句以来的第节点的第一节点的第一作品接下来是空的,所以我把它放到dowhile中,以便它检查它,但是当我尝试通过a,b,c,d正常运行它时,仍然收到空指针。空指针上,而发生(tempNode.next!= NULL)

do 
     { 
      if(tempNode.bookElement.compareTo(book) > 0) 
      { 
       val = 1; 
       break; 
      } 

      else if(tempNode.bookElement.compareTo(book) == 0) 
        return false; 
      else 
      { 
       val = -1; 
       tempNode = tempNode.next; 
      } 
     } 

     while(tempNode.next != null); 

回答

1

您当前的代码无法节点添加到列表的末尾,因为在这种情况下tempNode变空,tempNode.next给你NullPointerException

你应该改变你的条件while(tempNode.next != null),但如果循环val < 0之后,你要比较currenttempNode,以确定是否应current之前或tempNode之后插入。

+0

你能检查我更新的问题吗? – joe 2014-10-26 22:03:05

相关问题