Вы объявляете dummy
, чтобы указать на тот же объект, что и head
. Затем позже вы делаете head.next = null;
, так как dummy
и head
ссылаются на один и тот же объект, dummy.next
также является нулевым.
EDIT:
Просмотрев ваш код, я обнаружил проблему.
Я вставлю ваш код с номерами строк для удобства.
ListNode dummy = new ListNode(0); // Line 1
dummy.next = head; // Line 2
ListNode prev = dummy; // Line 3
ListNode slow = head; // Line 4
head.next = null; // Line 5
prev.next = slow; // Line 6
ListNode temp = slow.next; // Line 7
prev.next = temp; // Line 8
System.out.println(dummy.next); // Line 9
Строки 3-4: теперь prev
указывает на тот же объект, что и dummy
, и то же самое для slow
и head
. Мы можем по существу использовать эти «имена» взаимозаменяемо.
Строка 5: установка head
рядом с нулем
Строка 6: То же, что и бег: dummy.next = head
Строка 7: temp
теперь указывает на следующее head
(поскольку slow
и head
одинаковы). Помните, что следующий head
равен нулю (строка 5). По сути, это означает, что temp
равно нулю.
Строка 8: То же, что и dummy.next
= temp
. Так как temp равен нулю, именно здесь вы устанавливаете dummy
рядом с нулем