2016-02-21 1 views
0

Мне просто интересно, правильно ли это сделать, чтобы удалить узлы в определенных местах в связанном списке.Удаление узла в середине и в конце

So if my "target" node is located between the head and the tail (middle): 
1. set a "curr" node equal to the head 
2. Iterate using "curr = curr.next" until curr.next = "target" 
3. set curr.next = curr.next.next 

If my target is located at the tail I do: 
1. set "curr" node equal to the head 
2.Iterate until curr.next.next = null 
3. set curr.next = null 

я изо всех сил, чтобы понять, как изменить «ТОК» узел я устанавливается равным «голова» может изменить фактический связанный список, связанный с «головой», а не просто связанного списка, прикрепленного к " ТОК».

Спасибо мне очень нужна помощь в этом :)

ответ

0

curr ссылки фактические ссылки в связанном списке, а не только их копии, поэтому изменение curr также изменяет LinkedList. Это связано с тем, что все объекты java передаются по ссылке.

Кстати, я не думаю, что то будет правильно различать последний элемент, должен быть как:

  1. установить «ТОК» узел, равный голове
  2. Итерация с использованием «ТОК = не curr.next»до curr.next .value равна целевого
  3. , если цель была найдена (предыдущий цикл на самом деле не выполняется, если цель не в списке)

    3.1. если curr.next - последний элемент: curr.next = null

    3.2. еще curr.next = curr.next.next

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

+0

Так будет ли мой способ работать на средний узел? –

+0

С небольшой модификацией (check curr.next.value вместо curr.next) это было бы, но только если цель присутствует в списке. –