我试图将项目添加到双链表中,并且试图通过比较其字符串以正确顺序添加它们。在双向链表中之前/之后添加对象的问题
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);
你能检查我更新的问题吗? – joe 2014-10-26 22:03:05