有序插入链表

时间:2015-11-05 13:51:02

标签: java linked-list

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

2 个答案:

答案 0 :(得分:0)

您可以使用java.util.Collections课程对您的列表进行排序 的实施例

Collections.sort(your_list);

答案 1 :(得分:0)

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

  1. 每次调用insert时,都会为列表创建一个新的head(我假设你的类的一个字段)。这不是链接列表的工作方式。您应该只在headhead时显示新的null(空列表)

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

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

  4. 所以基本上你写的函数等同于此(试一试)

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

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