как предыдущий LinkedListNode фактически меняет переданный LinkedListNode n?
Посмотрите на строку
n = n.next;
Эта строка вызывает изменение переданного узла n - эффективно перемещая его на один узел вперед с каждой итерацией.
он использует этот недавно созданный LinkedListNode, предшествующий, чтобы пропустить дубликати ссылка на следующий элемент
Нет, новый узел здесь не создается.Узел previous
всегда указывает на узел в существующем LinkedList, для которого переданный узел n является одним из узлов.(может быть начальным узлом).Что заставляет вас думать, что он недавно создан?
Похоже, вы запутались в своем понимании того, как узлы и ссылки (и, таким образом, LinkedList в целом) работают в Java.Поскольку все изменения происходят с данными узла, а не с самой ссылкой (тьфу ... это не совсем правильно), исходный LinkedList, переданный методу, действительно модифицируется после его возврата.Вам нужно будет детально проанализировать структуру и работу LinkedList, чтобы понять, как это работает.Прежде всего, я хочу получить ясность относительно того, что передается по значению и передается по ссылкам в Java.
edit:
Ваш анализ прогона верен, однако ваша путаница все еще остается, потому что вы не концептуальнопрояснить некоторые вещи.
В конце вашего анализа вы спрашиваете: "как это prev
не связывает n
? кажется, что prev
- это LinkedListNode
, который не содержит дубликатов"
Это беспорядок - сначала нужно различить LinkedListNode
и LinkedList
.prev
и n
- это два экземпляра LinkedListNode
, а не LinkedList
.В вашем примере LinkedList
безымянный (у нас нет имени, чтобы ссылаться на него).Это оригинальный список - другого списка нет.
Во-вторых, на вашей иллюстрации числа, которые вы показываете, представляют собой только одну часть узла, называемую данными узла.Другая часть, которую вы пропустили, это ссылка next
LinkedListNode, которая неявно присутствует в каждом узле.Ссылка, которую вы рисуете ->, фактически является следующей ссылкой в каждом узле. Когда вы говорите, что предыдущая пропускает 5, на самом деле происходит следующее: следующий узел с данными 6 создается для указания на узел с данными 7.
В начале: 5 | следующий -> 6 | следующий -> 5 | следующий -> 7 | следующий -> NULL
После пропуска 5: 5 | следующий -> 6 | следующий -> 7 | следующий-> NULL
Как видите, связанный список изменен!Не имеет значения, было ли оно изменено с помощью prev или n, изменение остается в списке.