Java 有序插入链表

Java 有序插入链表,java,linked-list,Java,Linked List,我必须编写一个按顺序插入字符串的程序,比如当我插入dog和cat时,不管我插入它们的顺序如何,它都应该返回cat,dog。 到现在为止,当我这样做的时候,它不是按顺序插入,它像正常一样插入。我很确定我切换头部和电流的方法是有效的,因为之前,它会翻转我的输入,不管它是否应该翻转,如果它应该是猫-狗,它会返回狗-猫。无论出于什么原因,我的if语句几乎都会跳过它。任何提示都将不胜感激 public void insert(String s){ head= new node(s,head);

我必须编写一个按顺序插入字符串的程序,比如当我插入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();
        }
    }
}

您可以使用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();
}