Algorithm 문제풀이/Leetcode

(Easy - Linked List) Leetcode - 206. Reverse Linked List

j-engine 2024. 7. 7. 16:07

이 문제는 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을 가르키고 있다.
    }
};