2014-05-10 28 views
1

我试图按姓氏按字母顺序将人员插入到链接列表中。我有一个很奇怪的问题。你看到它的代码工作正常,除了列表是相反的顺序。我想不出就是为什么当我使用的代码行:按字母顺序插入到LinkedList中

current != null && lastName.compareTo(current.lastName) >= 0) 

插入人进入我的列表,而不是增加了100人,我加6然而,就像我上面说我能做到这一点的相反顺序没问题。这是怎么回事?

public void insert(String firstName, String lastName, String time,String show, String  command,int section){ 
    PeopleNode newNode = new PeopleNode(lastName,firstName,time,show,command,section); 
    size++; 
    PeopleNode previous = null; 
    PeopleNode current = head; 

    while(current != null && lastName.compareTo(current.lastName) <= 0){ 
     previous = current; 
     current = current.next; 
    } 

    if(previous == null){ 
     head = newNode; 
    }else{ 
     previous.next = newNode; 
     newNode.next = current; 
    } 
} 
+0

什么是* head *? LinkedList中的第一项? –

+0

头显然是保存链接列表中第一个对象的变量。第一个条件(摘录在最上面)应该以降序给你一个清单。按升序写入产品的块。我不清楚你在每个案件中看到的情况。我不明白100与6.你可能包含数据吗? – AgilePro

回答

2

我猜compareTo方法的工作倒过来了String S,所以也许尝试

while(current != null && current.lastName.compareTo(lastName) <= 0) 

但我建议你只使用Compareable接口,并通过使用Collections.sort(yourlist)

排序列表
+0

这工作,并相信我,我希望我可以使用列表类。我将这门课作为选修课。在我的实习中,我只使用列表和迭代器编写java代码。 –

0

假设你有“b”,“c”,“d”和“a”作为姓氏。如果按照这个顺序插入,前三个节点将是:

乙 - >ç - > d

当您尝试插入一个,也不会进入while循环。所以,“前一个”将是空的。它将进入第一个条件并将头部设置为新节点,即“a”,并且它将退出该方法。头的下一个没有设置。

所以你有一个坏的列表,只有最后的“a”节点。

我没有尝试过,但这似乎是问题所在。

0

好吧我想通了!

if(previous == null){ 
    head = newNode; 
}else{ 
    previous.next = newNode; 
    newNode.next = current; 
} 

行:

newNode.next = current; 

需要在else语句之外!