>我必须编写一个按顺序插入字符串的程序,例如当我插入狗和猫时,无论我插入它们的顺序如何,它都应该返回猫,狗。截至目前,当我这样做时,它不是按顺序插入的,而是像往常一样插入。我很确定我切换头部和电流的方法有效,因为早些时候,它会翻转我的输入,无论它是否应该 所以如果它应该是猫狗,它会返回狗猫。无论出于何种原因,它都会进入我的 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();
}
}
}
java.util.Collections
类对列表进行排序前任:
Collections.sort(your_list);
您的代码和逻辑存在一些问题。我将在下面给出修复提示
-
每次调用插入时,您都会为列表创建一个新
head
(我假设是您类的一个字段(。 这不是链接列表的工作方式。仅当head
null
时,才应创建新head
(空列表( -
您正在将
current
设置为新创建的head
之后的下一个节点。因此,它将具有node
构造函数分配给它的任何值。如果它分配默认值null
,您将永远不会进入 if 语句的 else 部分。 -
根据上述内容,您将不可避免地进入 if 语句的第一个,您将
current
从null
重新分配给head
。然后你基本上是在比较同一节点(头(的数据(字符串(,你永远不会进入下一个if。
所以基本上你写的函数等效于这个(试试看(
public void insert(String s) {
head = new node(s, head);
node current = head.getNext();
}
这可能不是您的意图。开始更改代码,仅在 null 时创建 head
,然后返回(如果列表只有一个元素,则无需交换(。然后在 head 之后插入一个新节点,并在需要时进行交换。