双向链表,current.next = null

时间:2013-06-06 06:04:49

标签: java list pointers null linked-list

做一个家庭作业问题,插入链表中的第一项插入正常,当我插入更多的值时,它们按顺序出现因为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;    
 }

2 个答案:

答案 0 :(得分:0)

在if块中添加'last = newLink',如下所示:

if(current == first) {
    ....

    if(key.compareTo(current.dData) > 0) {

        last = newLink;
        ....
    }
    ....
}

这是必需的,因为如果控件转到if块,那么当前是最后一个Link。否则,当完成上面的while循环时,电流将是当前右边的另一个Link。

答案 1 :(得分:0)

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