0

做作业问题,插入链表的第一项插入很好,当我插入更多值时,它们出现乱序,因为根据调试器 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;    
 }
4

2 回答 2

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
于 2013-06-06T18:21:39.030 回答
0

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

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

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

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

这是必需的,因为如果控件转到该 if 块,则当前是最后一个链接。否则,在上面的 while 循环完成后,当前将是当前右侧的另一个链接。

于 2013-06-06T18:05:35.047 回答