Основы связанного списка - PullRequest
0 голосов
/ 30 июня 2018

Я пытаюсь понять основы связанного списка. Определение моего класса LinkedList следующее:

 public class ListNode {
 int val;
 ListNode next;
 ListNode(int x) { val = x; }

Теперь я столкнулся с проблемой. Мой код выглядит следующим образом:

ListNode dummy = new ListNode(0);
dummy.next =  head;
ListNode prev = dummy;
ListNode slow = head;
head.next = null;
prev.next = slow;

ListNode temp = slow.next;
prev.next = temp;

System.out.println(dummy.next); //comes out null

Почему это выходит как ноль? dummy.next указывал на голову, и я изменил только slow и prev?

EDIT:

Можем ли мы использовать slow и head взаимозаменяемо? Если да, то почему это происходит?

// head points to a Linked list starting from 1 in 1 -> 2 -> 3
ListNode curr = head;

while(curr.next!= null){
    curr= curr.next;
}

System.out.println(curr);
System.out.println(head); //these are different and head does not change

1 Ответ

0 голосов
/ 30 июня 2018

Вы объявляете 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 рядом с нулем

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...