2013-07-16 4 views
1

Я столкнулся со следующей проблемой:Установка себя на нуль - Java

Удалить узел в середине отдельного списка, учитывая только доступ к этому узлу. (голова не указана) Теперь есть много решений, и все они не работают, когда элемент, который нужно удалить, является последним узлом.

Почему бы не так работать?

public static void removeNode (Node n){ 
    if(n.next == null){ //n is the last node 
     n= null; 
     return; 
    } 
    //handling general case here 
} 

ответ

6

Java передает параметры по значению, поэтому установка параметра п в null не имеет эффекта вне метода. Это означает, что метод по существу ничего не делает при передаче последнего узла списка.

+0

+1 для объяснения ** почему ** он не работает. Ты избил меня к нему просто волосами! –

+1

Почему n.next = null работает? Разве это не изменило бы русский язык на метод? – MinaHany

+1

Объект, на который указывает 'n', используется совместно с вызывающим. См. Http://stackoverflow.com/questions/40480/is-java-pass-by-reference – Joni

2

Вам необходимо установить нулевую ссылку в предыдущем узле, а не переменную, что ссылки на ваш последний узел, что-то вроде этого:

if(n.next == null) { 
    prev.next = null; 
    return; 
} 
1

n является локальным для метода, поэтому изменение его значения не повлияет на список. Вам необходимо изменить next предыдущего узла, к которому у вас нет доступа.

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