Устранение путаницы в связном списке в Java - PullRequest
1 голос
/ 02 августа 2020

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

public static ListNode reverseList(ListNode head)
{
    ListNode prev = null;

    while(head != null)
    {
        ListNode nextNode = head.next;
        head.next = prev;

        prev = head;
        head = nextNode;
    }

    return prev;
}

У меня проблемы с строкой head.next = prev;. Когда это происходит, я предполагал, что значение nextNode также изменится, потому что оно также указывает на head.next. Однако он остался прежним. Я знаю, что это как-то связано со ссылками на объекты, но я не совсем уверен. измените значение val объекта test и распечатайте его из test2, я получаю такое же точное значение, как o:

    test.val = 8;

    System.out.println(test2.val); // this also prints out 8

1 Ответ

1 голос
/ 02 августа 2020

Некоторые графические изображения для лучших иллюстраций

Здесь head, node1 и nextNode - это объект

enter image description here

As seen, headNext and nextNode is pointing to node1. headNext is not an object but just referencing to node1.

Next headNext is pointed to prev. Notice nextNode is still pointing to node1

enter image description here

For second example, after creating listNode test with value 5, test2 is assigned and pointed to test object. Hence any changes to test value will reflect to test2 too

введите описание изображения здесь

Надеюсь, это поможет понять!

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