이 문제는 Linked-List를 뒤집는 문제입니다.
이전 노드, 현재 노드, 다음 노드를 각각 추적하며 각 노드가 가르키는 방향을 바꿔줍니다.
/**
* 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) {
ListNode* next, *prev = nullptr; // 이전 노드, 다음 노드
while (head) {
next = head->next; // 반전되기 전 현재 노드의 다음 노드를 저장
head->next = prev; // list가 반전되도록 다음 노드가 이전 노드를 가르킨다.
prev = head; // 현재 노드를 이전 노드로 저장
head = next; // 현재 노드를 list 반전하기 전 저장한 다음 노드로 이동
}
return prev; // loop가 끝나면 next와 head는 nullptr을 가르키고 있다.
}
};