Этот код должен перевернуть связанный список. Следующий код возвращает пустой связанный список, даже если он предоставлен с непустым списком.
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* curr, *prev, *next;
if (head == NULL)
{
return head;
}
curr = head;
prev = NULL;
while (curr != NULL)
{
next = curr -> next;
curr -> next = prev;
prev = curr;
curr = next;
}
head = prev;
return head;
}
};
Хотя этот код странно работает, когда я добавил оператор cout, чтобы проверить, был ли запущен else.
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* curr, *prev, *next;
if (head == NULL)
{
cout << "Triggered";
return head;
}
curr = head;
prev = NULL;
while (curr != NULL)
{
next = curr -> next;
curr -> next = prev;
prev = curr;
curr = next;
}
head = prev;
return head;
}
};
Может кто-нибудь объяснить, почему это происходит?
next
, поэтому первая итерация цикла while имеет неопределенное поведение. - person 1201ProgramAlarm   schedule 20.06.2020