Почему мой обратный метод LinkedList не работает более одного раза? - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть следующий метод:

    public static IntNode reverse (IntNode head) {
            IntNode prev = null;
            IntNode curr = head;
            IntNode next = null;
            while(curr!=null) {
                next = curr.link;
                curr.link = prev;
                prev = curr;
                curr = next;
            }
            return prev;
        }

Это прекрасно работает, но при двойном запуске он просто возвращает первый (технически последний) узел в связанном списке и ничего более, почему это так и могло Вы помогаете мне это исправить? Спасибо.

Например: перед реверсом: 10 25 5 14 2 После реверсирования: 2 14 5 25 10 После повторного ввода реверсирования: 10

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Я думаю, что метод правильный. Просто убедитесь, что при вызове метода reverse () присваиваете результат метода reverse () его голове.

head = reverse(head);//correct coz head changes after reversal

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

reverse(head)//Wrong coz head won't change after reversal

заголовок не будет обновлен, и он будет указывать только на хвост связанного списка. Надеюсь, это поможет.

0 голосов
/ 27 февраля 2020

Весь ваш список начинается с головы. Как только вы переключаете свои узлы, head теперь указывает на последний узел (т. Е. Его .link имеет значение null).

Вам необходимо сбросить head в качестве первого узла, чтобы получить доступ к списку.

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