按字母顺序插入链接列表

时间:2014-05-10 00:37:56

标签: java linked-list compareto

我试图通过lastName按字母顺序将人员插入到链接列表中。我有一个非常奇怪的问题。您看到的代码工作正常,但列表的顺序相反。当我使用代码行时,我无法弄清楚的原因是:

    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;
    }
}

3 个答案:

答案 0 :(得分:2)

我认为compareTo方法在String s方向相反,所以也许尝试

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

但我建议您只使用Compareable界面,并使用Collections.sort(yourlist)

对列表进行排序

答案 1 :(得分:0)

让我们说你有&#34; b&#34;,&#34; c&#34;,&#34; d&#34;和&#34; a&#34;作为姓氏。如果按顺序插入,前三个节点将是:

b - &gt; c - &gt; d

当您尝试插入a时,它将不会进入while循环。所以,&#34;之前&#34;将为null。它将进入第一个if条件并将head设置为新节点,即&#34; a&#34;,它将退出该方法。接下来没有设置头部。

所以你有一个只有&#34; a&#34;节点在最后。

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

答案 2 :(得分:0)

好的我明白了!

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

该行:

 newNode.next = current;

需要在else语句之外!