做一个作业,插入到链表中的第一个项插入得很好,当我插入更多的值时,它们出现无序,因为current。根据调试器,next仍然是== null,我不明白为什么我的生活。
public void insert(String key)
{
Link newLink = new Link(key);
Link current = first;
Main.nodeCount++;
while(current != null && key.compareTo(current.dData) > 0)
{
if(current.next != null)
current = current.next;
else
break;
} // end while
if(isEmpty())
{
first = newLink;
last = newLink;
return;
}
if (current == first )
{
if(key.compareTo(current.dData) < 0)
{
newLink.next = current;
current.previous = newLink;
first = newLink;
return;
}//end if
if(key.compareTo(current.dData) > 0)
{
current.next = newLink;
first.next = newLink;
newLink.previous = current;
return;
}//end if
}
if (current == last)
{
if(key.compareTo(current.dData) < 0)
{
current.previous.next = newLink;
newLink.previous = current.previous;
newLink.next = current;
current.previous = newLink;
last = current;
}
if(key.compareTo(current.dData) > 0)
{
newLink.previous = current;
current.next = newLink;
last = newLink;
return;
}//end if
return;
}//end if
if (current != first && current != last)
{
current.previous.next = newLink;
newLink.previous = current.previous;
newLink.next = current;
current.previous = newLink;
}
在if块中添加'last = newLink',如下所示:
if(current == first) {
....
if(key.compareTo(current.dData) > 0) {
last = newLink;
....
}
....
}
这是必需的,因为如果控件转到if块,则当前是最后一个链接。否则,在上面的while循环结束后,current将是current右边的另一个Link。
if(isEmpty())
{
first = newLink;
first.next = NULL; //need to initialize next and prev pointers
first.prev = NULL;
last = first;
return;
}
if (current == first )
{
if(key.compareTo(current.dData) < 0)
{
newLink.next = current;
current.previous = newLink;
first = newLink;
return;
}//end if
if(key.compareTo(current.dData) > 0)
{
current.next = newLink;
// first.next = newLink; --> redundant
newLink.previous = current;
newlink.next = NULL;
last = newLink -->
return;
}//end if