2013-06-06 3 views
0

Выполнение домашней проблемы, первый элемент, вставленный в связанный список, вставляет отлично, когда я вставляю больше значений, они выглядят не в порядке, поскольку current.next остается == 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;  
} 
+0

Оказывается, проблема заключалась в том, что не объявлял новый последний указатель после добавления новых ссылок в текущие операторы первого порядка, я каким-то образом испортил порядок. Я постараюсь выяснить более точный ответ завтра, когда я действительно спал :) – NoobException

ответ

0

Add «последний = NewLink» в, если блок следующим образом:

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

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

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

Это необходимо потому, что если управление переходит к тому, что если блок, то ток является последним звеном. В противном случае ток был бы другой ссылкой справа от тока, по завершении цикла while выше.

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