2016-01-30 4 views
0

Я работаю над списком ссылок и в настоящее время не могу удалить специализированный узел по ключевому значению. Я спрашиваю помощника в своей школе, и он не уверен, почему он не работает. (Существует также много попыток уловов для другого вопроса. Извиняюсь за то, насколько он важен)Проблема с удалением узла

Вот мой метод удаления:

public void remove(int key) throws Exception { 
     Node tmp = first; 
     Node pred = first; 

     while (tmp != null) { 
      if (tmp.keyValue == key) { 
       pred = tmp; 
       tmp = tmp.next; 

      } else { 
       tmp = tmp.next; 
      } 

     } 

Вот мой основной метод creaing списка и пытается удалить его и распечатать его:

OrderedLinkedList oLL3 = new OrderedLinkedList(); 
     try { 
      oLL3.insert("Should be removed", 5); 
      oLL3.insert("Shouldn't be removed 2nd", 15); 
      oLL3.insert("Shouldn't be removed", 10); 
     } catch (Exception e) { 
      System.out.println("Error: Two nodes with the same key value and the newest one won't be stored."); 
     } 
     try { 
      oLL3.remove(5); 
     } catch (Exception r) { 
      System.out.println("Error:No nod with the key value to be removed"); 
     } 
     System.out.print("toString test removing node: \n" + oLL3.toString()); 

     System.out.println("Number of nodes in the List:" + oLL3.listCount()); 


     } 

ответ

0

Ваш метод remove только присвоение локальным переменным. Это не повлияет на состояние вашего связанного списка. Предполагая, что руководителем вашего списка является узел, удерживаемый полем first, вам необходимо назначить либо first, либо поле .next в другом узле.

Чтобы удалить первый узел, вы можете сделать:

first = first.next; 

Чтобы удалить узел после узла prev, вы можете сделать:

prev.next = prev.next.next; 

(нуль-проверки, где это уместно)

+0

Мои переменные tmp и pred Node назначаются первым в методе удаления. Или вы имеете в виду что-то еще? –

+0

Это локальные переменные. Присвоение им не влияет ни на что вне метода, к которому они принадлежат. – khelwood

+0

Значит, вы говорите, вместо того, чтобы сначала назначать что-то локальное в методе, я должен сначала назначить что-то, что не является локальной переменной? (Я также просто не могу создавать какие-либо переменные-члены, кроме первых.) –

1

В этом показанном коде вы удаляете первый узел связанного списка, а для удаления первого узла вам нужно указать «голова» (или другое имя вашего головного узла) на второй узел, то есть

head = head.next; 
Смежные вопросы