2014-01-02 2 views
6

Вопрос, требующий удалить средний узел в связанном списке, предоставляется только этот узел. Путь решить проблему копирования middle.next.element в middle.element, а затем удалить middle.next делая middle.next=middle.next.nextJava: как использовать фиктивный узел или пометить узел как фиктивный узел

Там особый случай, когда middle.next последний узел. Ответ говорит, что вы можете отметить средний узел как манекен.

Я не знаком с идеей «манекен». Как пометить узел как манекен и как использовать фиктивный узел в других случаях?

Что относительно фиктивных данных вообще?

+1

Вы можете поместить в узел определенное значение или добавить атрибут (в зависимости от типа узла). Затем вам нужно проанализировать узлы, которые нужно извлечь, и пропустить все узлы, содержащие это специальное значение или атрибут (помеченный как манекен). – Vlad

+0

Помогла бы, если бы вы могли опубликовать (ссылку на) исходный текст/источник. Насколько я понимаю, идея использует фиктивный узел для последнего элемента вместо просто «null», поэтому, если второй-последний узел (последний реальный узел) удален, вам не нужно возвращаться к узлу до этого, чтобы изменить элемент 'next' этого узла. –

+0

Идея состоит в том, чтобы избежать удаления операций в списке. – Vlad

ответ

4

Общего ответа на этот вопрос нет. Реализация связанного списка должна уже определить концепцию фиктивного узла и последовательно использовать его. Типичный способ для достижения этой цели было бы объявляя специальный манекен экземпляра:

public class Node { 
    public static final Object DUMMY = new Object(); 
    ... 

и назначение middle.element = DUMMY;

Как вы можете себе представить, это не будет иметь никакого эффекта, если все остальные реализации API не пребывающий по этому соглашению.

Если ваш список указан как неспособный содержать null элементов, то вы также можете назначить middle.element = null, но остальная часть истории останется прежней.