我试图通过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;
}
}
答案 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语句之外!