Не могу понять, почему мой код для решения проблемы с лит-кодом обратного связанного списка не работает [закрыто] ⇐ C++

Программы на C++. Форум разработчиков
Anonymous
Не могу понять, почему мой код для решения проблемы с лит-кодом обратного связанного списка не работает [закрыто]

Сообщение Anonymous »

Код: Выделить всё

/**
* Definition for singly-linked list.
* struct ListNode {
*     int val;
*     ListNode *next;
*     ListNode() : val(0), next(nullptr) {}
*     ListNode(int x) : val(x), next(nullptr) {}
*     ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public: ListNode * reverseList(ListNode * head) {
if (head == nullptr) return nullptr;
ListNode * current = head;
while (current -> next != nullptr) {
current = current -> next;
}
ListNode * newhead = current;
ListNode * runner = head;
while (current != head && runner != head) {
runner = head;
while (1) {
if (runner -> next == current) {
current -> next = runner;
break;
}
runner = runner -> next;
}
current = current -> next;
}
current -> next = nullptr;
return newhead;
}
};
Пример -> [1, 2, 3, 4, 5]
Мой код выдает только 5, и похоже, что другие участники не связаны или что-то в этом роде, и я не понимаю, почему.
Я не знаю, почему это не работает. Узел newhead указывает на последний узел исходного списка, который является новым заголовком перевернутого списка. Я указываю указатель следующего каждого узла на предыдущий узел, но он не связывается.
Может кто-нибудь объяснить мне, почему это не работает? Я могу просто где-нибудь выучить наиболее эффективный код для решения этой проблемы, но я хочу знать, какую ошибку я сделал, что он не работает.

Подробнее здесь: https://stackoverflow.com/questions/789 ... de-problem

Вернуться в «C++»