我必须编写一个按顺序插入字符串的程序,例如当我插入dog和cat时,无论我插入它们的顺序如何,它都应该返回cat,dog。 截至目前,当我这样做时,它不是按顺序插入,它就像正常插入一样。我很确定我的切换头部和电流的方法是有效的,因为早些时候,它会翻转我的输入,无论它是否应该如此。如果它应该是猫狗,它将返回狗猫。无论出于什么原因,它都会出现在我的if语句中,它几乎就像它跳过它一样。任何提示将不胜感激。
public void insert(String s){
head= new node(s,head);
node current=head.getNext();
if(current == null){
current=head;
while(current.getNext() != null){
if(current.getData().compareTo(s)>0){
current.setNext(head);
head.setNext(current.getNext().getNext());
head=current;
current=head;
}
current= current.getNext();
}
}else{
while(current.getNext() != null){
if(current.getData().compareTo(s)>0){
current.setNext(head);
head.setNext(current.getNext().getNext());
head=current;
current=head;
}
current=current.getNext();
}
}
}
答案 0 :(得分:0)
您可以使用java.util.Collections
课程对您的列表进行排序
的实施例强>
Collections.sort(your_list);
答案 1 :(得分:0)
您的代码和逻辑存在一些问题。我将提供修复以下的提示
每次调用insert时,都会为列表创建一个新的head
(我假设你的类的一个字段)。这不是链接列表的工作方式。您应该只在head
为head
时显示新的null
(空列表)
您正在将current
设置为新创建的head
之后的下一个节点。因此,它将赋予node
的构造函数赋予它的任何值。如果它指定默认值null
,您将永远不会进入if语句的else部分。
根据上述内容,您将不可避免地进入if语句的第一个,其中current
从null
重新分配到head
。那么你基本上是在比较同一个节点(头部)的数据(字符串)而你永远不会进入下一个节点。
所以基本上你写的函数等同于此(试一试)
public void insert(String s) {
head = new node(s, head);
node current = head.getNext();
}
这可能不是你想要的。开始更改代码时只创建head
为null,然后返回(如果列表只有一个元素不需要交换)。然后在head之后插入一个新节点并根据需要进行交换。