有序插入到链表中



>我必须编写一个按顺序插入字符串的程序,例如当我插入狗和猫时,无论我插入它们的顺序如何,它都应该返回猫,狗。截至目前,当我这样做时,它不是按顺序插入的,而是像往常一样插入。我很确定我切换头部和电流的方法有效,因为早些时候,它会翻转我的输入,无论它是否应该 所以如果它应该是猫狗,它会返回狗猫。无论出于何种原因,它都会进入我的 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);

您的代码和逻辑存在一些问题。我将在下面给出修复提示

  1. 每次调用插入时,您都会为列表创建一个新head(我假设是您类的一个字段(。 这不是链接列表的工作方式。仅当head null时,才应创建新head(空列表(

  2. 您正在将current设置为新创建的head之后的下一个节点。因此,它将具有node构造函数分配给它的任何值。如果它分配默认值 null ,您将永远不会进入 if 语句的 else 部分。

  3. 根据上述内容,您将不可避免地进入 if 语句的第一个,您将currentnull 重新分配给 head 。然后你基本上是在比较同一节点(头(的数据(字符串(,你永远不会进入下一个if。

所以基本上你写的函数等效于这个(试试看(

public void insert(String s) {
    head = new node(s, head);
    node current = head.getNext();
}

这可能不是您的意图。开始更改代码,仅在 null 时创建 head,然后返回(如果列表只有一个元素,则无需交换(。然后在 head 之后插入一个新节点,并在需要时进行交换。

相关内容

  • 没有找到相关文章