双链表,当前.下一个= null



做一个作业,插入到链表中的第一个项插入得很好,当我插入更多的值时,它们出现无序,因为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

相关内容

  • 没有找到相关文章

最新更新