2015-07-19 3 views
0

Я должен написать программу, управляемую меню, которая либо принимает слова, либо их значения, либо отображает список слов в лексикографическом порядке (например, в словаре). Один метод, который я должен написать, - это метод удаления. Назначение основано на основных свойствах связанного списка. Мы не используем класс связанного списка. Это то, что я до сих пор:Удаление узла в linklist java

public String delete(String a) { 
    boolean found = false; 
    WordNode aux = list; 
    WordNode back = null; 
    String deleted = ""; 

    while (aux != null && !found) { 

     if (a.equalsIgnoreCase(aux.getAll().getWord())) { 
      deleted = deleted + aux.getAll().getWord(); 

      back = aux.next; 

      aux = null; 

      found = true; 
     } else { 

      back = aux; 
      aux = aux.next; 

     } 

    } 
    return deleted; 
} 

Но всякий раз, когда я называю метод удаления в моем главном классе, а затем вызвать мою ToString, список нетронутым. Удаленные слова все еще находятся в списке.

+1

Я не вижу какую-либо фактическая делеция происходит! –

+0

Вы хотите удалить String a из списка? Если да, то для чего используется удаление? и как заметил Роберт Москаль, где это удаление? – c0der

+1

Переменная 'found' не требуется и является избыточной. –

ответ

0

Все, что вам нужно сделать, это изменить строку (это строка # 12, я думаю)

back = aux.next; 

в

if (back == null) 
    list.next = aux.next; 
else 
    back.next = aux.next; 
1

Возможно, что-то вроде этого?

public String delete(String a) { 
    WordNode aux = list; 
    WordNode back = null;   

    while (aux != null) { 

     if (a.equalsIgnoreCase(aux.getAll().getWord())) { 

     if (back != null) { 
      //change the pointer from the previous node to the one after the deleted one 
      back.next = aux.next; 
     } else { 
      //first node was found, so modify list to point his successor as the new head 
      list = aux.next; 
     } 
     return a; 
     } else { 
     back = aux; 
     aux = aux.next; 
     } 

    } 
    return ""; //no node was found 
} 

Это должно соответствовать вашему контракту, но я бы рассмотрел передачу списка в качестве аргумента и вернул указатель на голову.

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