2016-09-21 4 views
0

Может ли кто-нибудь объяснить, почему следующий метод удаления не работает? Кажется, создается бесконечный цикл по значению, которое я пытаюсь удалить. Он должен перебирать связанный список, удалять все экземпляры значения, переданного методу, и возвращать общее количество удаленных узлов (return num;).Связанный список Метод удаления

public int delete(T value) 
{ 
    int num = 0; 
    ListNode<T> trav = head; 
    ListNode<T> next = head.getNext(); 

    while(trav != null) { 
     if(trav.getValue().compareTo(value) == 0) { 
     trav = next;    
     num++; 
     } 
     if(next.getValue().compareTo(value) == 0) { 
     trav = next.getNext(); 
     num++; 
     } 
     trav = trav.getNext(); 
    } 

    return num; 
} 
+2

Вы можете использовать свой отладчик, чтобы выполнить свой код, однако некоторые вещи явно ошибочны. а) вы никогда не обновляете голову; б) вы никогда не меняете 'next', поэтому, когда вы делаете' trav = next; 'это вернет вас ко второму элементу. c) вы фактически не удаляете какие-либо узлы. d) Проверка на 'if (next', похоже, не указана. –

ответ

0

Вы никогда не изменяете значение next.

if(trav.getValue().compareTo(value) == 0) { 
    trav = next;    
    num++; 
    } 
    if(next.getValue().compareTo(value) == 0) { 
    trav = next.getNext(); 
    num++; 
    } 

Со следующего никогда не меняется, вы сравниваете то же значение во втором if каждый раз.

+0

' trav = trav.getNext(); '? – NotToBrag

+0

По-прежнему не меняя значения переменной' next'. Вы хотите что-то большее, next = next.getNext(); ' –

Смежные вопросы