2015-10-16 1 views
-4

У меня есть коды из учебника. И коды намерены удалить узел.Как узлы работают на Java?

Node<String> nodeRef = head.next; 
nodeRef.next = nodeRef.next.next; 

Что делает Node<String> nodeRef = head.next; на самом деле здесь?
nodeRef скопировать head.next элемент узла?
Если да, то имеет значение head.next пункт как nodeRef, так и оригинал head.next?

Или Node<String> nodeRef = head.next; просто укажите название head.next вместо создания нового узла?

Все еще путайте работу узлов. Может ли кто-нибудь объяснить?

+0

Есть ли 'импорт some.package.Node;' строка в книге? Можете ли вы изменить свой вопрос, чтобы включить это? – shoover

+0

Да, я предполагаю, что вы смотрите на текст структур данных, который реализует связанный список узлов. Голова в этом случае является первым узлом в связанном списке. Он ссылается на следующий в списке. Вы перебираете список, начиная с головы и идя по каждому последующему следующему узлу. – duffymo

+0

@shoover Нет, так оно и есть. – ksdawq

ответ

1

«Узлы» не имеет значения; это просто ссылки на объекты. Замените Node любым другим ссылочным типом, и вопрос будет точно таким же.

Node nodeRef = head.next; 

Это устанавливает nodeRef в качестве ссылки на то, что в head.next. Он ничего не копирует.

head.next не меняется вообще, если вы его не изменили.

Для решения одной из ваших комментариев:

nodeRef.next = nodeRef.next.next будет делать только то, что он говорит; вместо ссылки на оригинал nodeRef.next теперь он будет ссылаться на nodeRef.next.next.

Объект, на который ссылается оригинал nodeRef.next, больше не будет повторяться, поскольку ни один узел не указывает на него. Это может быть или не быть приемлемым для GC в зависимости от того, имеет ли что-либо другое ссылку на него.

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

+0

Если 'nodeRef' указывает на' Node' с '7' в связанном списке, который выглядит как' 7 -> 8 -> 10', то 'nodeRef.next = nodeRef.next.next' сделает' Node' с '7' указывают на' Node' с '10' вместо' 8'. Итак, теперь ваш список будет выглядеть как '7 -> 10'. –

+0

Если nodeRef - это просто ссылка, "nodeRef.next = nodeRef.next.next;" просто изменит nodeRef.next вместо head.next.next (как nodeRef = head.next). Поэтому я не вижу, как эта вещь удаляется здесь, потому что только nodeRef.следующая точка в другое место вместо исходных узлов – ksdawq

+1

Если 'nodeRef = head.next', то' nodeRef.next' совпадает с 'head.next.next'. 'nodeRef' * is *' head.next', они ссылаются на один и тот же объект. Если вы меняете материал из 'nodeRef', вы все равно прикасаетесь к тому, на что ссылается« head.next ». Я настоятельно рекомендую рисовать простую картинку с полями и строками, которые представляют собой связанный список, например https://upload.wikimedia.org/wikipedia/commons/thumb/4/4b/CPT-LinkedLists-addingnode.svg/474px -CPT-LinkedLists-addednode.svg.png, и перейдя через код в голове или на бумаге. –