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