在Java中创建排序链表
所以我应该按照字母顺序对Java中的链表进行排序(节点是字符串)。我不允许使用集合,所以我必须建立自己的链表和排序算法。我创建了一个方法,可以在链表中找到最大的(或字母表中最远的)单词。现在我尝试通过获取一个链表进行排序,找到最大的元素并将其插入到一个新的链表中。然后,它删除最大的链接,并继续执行相同的操作,直到链接列表为空。当我运行它时,我得到了一个空白列表,我的代码怎么了 返回最大元素的代码在Java中创建排序链表,java,sorting,linked-list,Java,Sorting,Linked List,所以我应该按照字母顺序对Java中的链表进行排序(节点是字符串)。我不允许使用集合,所以我必须建立自己的链表和排序算法。我创建了一个方法,可以在链表中找到最大的(或字母表中最远的)单词。现在我尝试通过获取一个链表进行排序,找到最大的元素并将其插入到一个新的链表中。然后,它删除最大的链接,并继续执行相同的操作,直到链接列表为空。当我运行它时,我得到了一个空白列表,我的代码怎么了 返回最大元素的代码 public Link isLargest(){ Link large = first;
public Link isLargest(){
Link large = first;
Link temp = null;
Link current = first;
Link after = current.next;
while (after != null){
if (large.lastName.compareTo(after.lastName) < 0){
large = after;
}
temp = current;
current = temp.next;
after = current.next;
}
return large;
}
找到最大的链接后,删除LinkedList头部(removeFront)的链接。这是不正确的,因为头部的链接不一定是最大的链接。您需要删除的是最大的链接。仅供参考,在Java中有一个方法命名约定,任何名为
isFoo()
的方法都会返回布尔值。如果您想实际获取一个值,您需要将您的方法命名为getFoo()
,或findFoo()
或类似的名称,以避免混淆。关于您的问题,您的linkSort()
方法看起来应该向sorted
添加内容,因此,我猜您要传递的未排序列表是空的,或者您的isEmpty()
方法中存在错误。您是否尝试过在调试器中单步执行linkSort()
,或者至少插入一些日志语句以确保执行while循环?我有点困惑。。。您是否需要创建一个排序的列表
(如问题的标题所示,在这种情况下,您只需覆盖任何典型的链接列表
的add()
方法即可),或者您是否需要实际对一些列表进行排序
?我需要按字母顺序对LinkedList进行排序,我正在创建一个新的排序列表,这如何解释返回的排序列表为空的原因?这应该是一个评论,因此是有用的,但它没有回答老年退休金计划的主要问题,它没有。这只是我看到的问题之一。我们需要看看insert()方法的样子。
private static LinkedList linkSort(LinkedList unsorted){
LinkedList sorted = new LinkedList();
while (!(unsorted.isEmpty())){
Link large = unsorted.isLargest();
sorted.insert(large.name, large.lastName);
first = large;
unsorted.removeFront();
}
return sorted;
}