Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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_Sorting_Nullpointerexception_Linked List - Fatal编程技术网

Java 如何对链表排序?

Java 如何对链表排序?,java,sorting,nullpointerexception,linked-list,Java,Sorting,Nullpointerexception,Linked List,我已经试了一下午了。 我甚至开始检查我的智力。 这很容易,但我真的不知道怎么做。 请帮助我,非常感谢!!! 使用java实现链表并按字母顺序排序 主要问题是while循环和nullPointerException 我不知道如何确定它是否是列表的结尾您需要将它分成几个小部分: 找到新节点应在其之后运行的节点让我们在之前调用它 在之后查找现有节点-在之前。下一步-在之后调用它。可能没有after,在这种情况下before.next将为null。 将新节点的下一个点设为after,或设为null 在新

我已经试了一下午了。 我甚至开始检查我的智力。 这很容易,但我真的不知道怎么做。 请帮助我,非常感谢!!! 使用java实现链表并按字母顺序排序

主要问题是while循环和nullPointerException
我不知道如何确定它是否是列表的结尾

您需要将它分成几个小部分:

找到新节点应在其之后运行的节点让我们在之前调用它 在之后查找现有节点-在之前。下一步-在之后调用它。可能没有after,在这种情况下before.next将为null。 将新节点的下一个点设为after,或设为null 在新节点处创建before.next点 了解哪些变量可以为空以及它们为空时的含义非常重要:

firstNode可以为null。这意味着它是一个空列表 节点的next可以为null。这意味着它是列表中的最后一个元素。 您的代码必须处理这两个问题

一次拿一个。第一个可能是最难的,因为其他的都很简单

链表不在数组中存储其元素,并且没有最大大小。LinkedList需要的唯一字段是Node firstNode。要访问其他元素,请按照第一个元素的下一个链接进行操作。因此:

 Node findInsertionPoint(String data) {
     Node node = this.firstNode;
     if(node == null) {
         return null;
     }
     Node nextNode = node.getNext();
     while(nextNode != null && nextNode.getData().compareWith(data) <=0) {
          node = nextNode;
          nextNode = node.getNext();
     }
     return node;
 }
这将返回:

当firstNode为null时,空列表为null 新节点应在其之后移动的节点,即在其他情况下所需的前一个节点。 findInsertionPoint本身就是一个可测试的方法,所以在继续之前,请测试它并确保它在许多情况下都能工作。空名单。单个元素列表。新节点应该首先启动。新节点应位于最后。新节点在中间,

现在,您只需要在新节点和before节点上创建新节点,并使用正确的值调用setNext。如果没有before节点,则需要将this.firstNode设置为指向新节点


请注意,在这里,您并不是在对链表进行排序,而是在已排序的列表中的正确位置插入一个元素。对链表进行排序的一种方法是逐个获取其元素,并以这种方式将它们插入到新列表中。但是还有其他更有效的方法,你可能会在以后的研究中遇到。

为什么你要将链表的节点放在一个数组中?也许你正试图从一些基于数组的列表实现中进化代码,这让你自己很难做到这一点?链表是完全不同的。
 Node findInsertionPoint(String data) {
     Node node = this.firstNode;
     if(node == null) {
         return null;
     }
     Node nextNode = node.getNext();
     while(nextNode != null && nextNode.getData().compareWith(data) <=0) {
          node = nextNode;
          nextNode = node.getNext();
     }
     return node;
 }