Java 有序插入链表
我必须编写一个按顺序插入字符串的程序,比如当我插入dog和cat时,不管我插入它们的顺序如何,它都应该返回cat,dog。 到现在为止,当我这样做的时候,它不是按顺序插入,它像正常一样插入。我很确定我切换头部和电流的方法是有效的,因为之前,它会翻转我的输入,不管它是否应该翻转,如果它应该是猫-狗,它会返回狗-猫。无论出于什么原因,我的if语句几乎都会跳过它。任何提示都将不胜感激Java 有序插入链表,java,linked-list,Java,Linked List,我必须编写一个按顺序插入字符串的程序,比如当我插入dog和cat时,不管我插入它们的顺序如何,它都应该返回cat,dog。 到现在为止,当我这样做的时候,它不是按顺序插入,它像正常一样插入。我很确定我切换头部和电流的方法是有效的,因为之前,它会翻转我的输入,不管它是否应该翻转,如果它应该是猫-狗,它会返回狗-猫。无论出于什么原因,我的if语句几乎都会跳过它。任何提示都将不胜感激 public void insert(String s){ head= new node(s,head);
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类对列表进行排序 例:
您的代码和逻辑存在一些问题。我将在下面给出修复的提示 每次调用insert时,您都会为列表创建一个新的头,我假定您的类有一个字段。这不是LinkedList的工作方式。仅当head为空列表时,才应创建新head 您正在将当前设置为新创建的头部之后的下一个节点。因此,它将具有节点构造函数分配给它的任何值。如果它指定一个默认值null,您将永远不会进入If语句的else部分 根据以上内容,您将不可避免地进入if语句的第一个部分,在这里您将current从null重新分配到head。然后,您基本上是比较同一节点头的数据字符串,而您永远不会得到下一个if 因此,基本上,您编写的函数相当于这个函数
public void insert(String s) {
head = new node(s, head);
node current = head.getNext();
}
这可能不是你想要的。开始更改代码时,只在head为null时创建它,然后在该列表只有一个元素不需要交换时返回。然后在head后插入一个新节点,并在需要时进行交换。我可以,但老实说,这是一项硬件分配,我们不允许这样做。那么我应该如何处理当前节点?我对那部分有点困惑。
public void insert(String s) {
head = new node(s, head);
node current = head.getNext();
}