Java 在双链接列表中添加对象之前/之后的问题
我尝试将项目添加到一个双链接列表中,并尝试按照通过比较字符串定义的正确顺序添加它们Java 在双链接列表中添加对象之前/之后的问题,java,algorithm,data-structures,Java,Algorithm,Data Structures,我尝试将项目添加到一个双链接列表中,并尝试按照通过比较字符串定义的正确顺序添加它们 public boolean add(Book book) { Node current = new Node(book); if(firstNode == null) { firstNode = current; lastNode = current; numElements++; ret
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]);
使用字符串compareTo对第一个参数,即“a”或“b”比较对象。
目前,如果我切换顺序,即“a”=“d”、“b”=“c”等,我可以使列表正确排序,但如果我保持现在的状态并尝试排序,我会在以下位置上得到一个空指针:
tempNode.next = current;
如果我排队
while(tempNode != null)
到
然后列表按顺序排序,我可以将其保留为a、b、c、d。但我希望能够正确排序,无论我添加它们的顺序如何,所以我认为我添加它们的方式有一些非常错误的地方
编辑:
我将列表向后添加,因此添加d,c,b,a first可以正常工作,因为它没有检查第一个节点while块中的if语句,因为接下来的第一个节点为null,所以我将它放入一个dowhile中,以便它进行检查,但当我尝试通过a,b,c,d正常运行它时,仍然会得到一个null指针。在while上发生空指针(tempNode.next!=null)
当前代码无法将节点添加到列表的末尾,因为在这种情况下,
tempNode
变为null,并且tempNode.next
为您提供NullPointerException
您应该将条件更改为while(tempNode.next!=null)
,但是如果在循环val<0
之后,您必须将current
与tempNode
进行比较,以确定current
应该在tempNode>之前还是之后插入
while(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);