Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在双链接列表中添加对象之前/之后的问题_Java_Algorithm_Data Structures - Fatal编程技术网

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);