2015-11-05 99 views
0

我必须编写一个程序,按顺序插入字符串,例如当我插入狗和猫,不管我插入它们的顺序,它应该返回猫,狗。 截至目前,当我这样做,它不插入顺序,它插入就像正常。我很确定我的方法是切换头部和当前的效果,因为更早,它会翻转我的输入,无论它是否应该如此。如果它应该是猫狗,它会返回狗猫。无论出于何种原因,它都会出现在我的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(); 
     } 
    } 
} 

回答

0

您可以按使用java.util.Collections防爆列表:

Collections.sort(your_list); 
+0

我可以,但老实说,这是一个重要任务,我们不允许。 – Haukka

0

有与您的代码和逻辑的几个问题。我会给提示固定下面你叫插入你的列表(我相信你的类的字段)创建一个新的head

  1. 每次。这不是链表列表的工作方式。您应该只创建一个新的headheadnull(空单)

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

  3. 根据以上你将不可避免地在第一时间拿到你来自哪里,null重新分配currenthead if语句。然后,你基本上是比较同一个节点(头)的数据(字符串),你永远不会进入下一个如果。

所以基本上你写的功能等同于这个(尝试一下)

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

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

+0

关于当前应该怎么办?我对这一部分有点困惑。 – Haukka