206. Reverse Linked List
2021. 6. 19. 04:54ㆍ알고리즘 관련/Linked List
https://leetcode.com/problems/reverse-linked-list/
연결리스트 뒤집는 문제.
1. 문제 이해
=> Given the head of a singly linked list, reverse the list, and return the reversed list.
단일 연결리스트의 헤드 노드가 주어질 시, 연결리스트를 뒤집어서 리턴하라.
Constraints:
- The number of nodes in the list is the range [0, 5000].
- -5000 <= Node.val <= 5000
Follow up: A linked list can be reversed either iteratively or recursively. Could you implement both?
재귀적인 방법만 써보게쓰.
2. 문제 재정의
요구 사항이 간단 명료해서 따로 문제 재정의는 스킵하겠다.
3. 계획 수립
각 노드를 재귀적으로 돌면서, 현재 노드의 다음 노드가 현재 노드를 가르키게 하면 된다.
그리고 값을 전달 전달받아서, 최종적으로는 맨 끝 노드를 반환하게 하면 된다!
4. 계획 검증
재귀 탈출 조건으로 현재 노드가 NULL이거나, 현재 노드의 next가 NULL이면 마지막 노드이므로 현재 노드를 리턴.
따라서 노드가 0개일 경우도 만족. 최대인 5000개 일 경우에도 10개인 경우와 차이가 없음.
5. 프로그램 구현
/**
* 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 || head->next == nullptr) return head;
ListNode *last = reverseList(head->next);
head->next->next = head;
head->next = nullptr;
return last;
}
};
6. 피드백 & 복기
재귀 다시 공부해야겠다.
ListNode *last = reverseList(head->next);
...
return last;
이렇게 처리해줄 시, 맨 끝 노드를 전달 전달하여 최종적으로 반환하는 아주 기본적인 사실을 기억하지 못했다. 이것 때문에 몇시간 날렸다..ㅠㅠ
'알고리즘 관련 > Linked List' 카테고리의 다른 글
328. Odd Even Linked List (0) | 2021.06.20 |
---|---|
707 - Design Linked List : 이중 연결리스트 ver. (0) | 2021.06.19 |
19. Remove Nth Node From End of List (0) | 2021.06.18 |
160. Intersection of Two Linked Lists (0) | 2021.06.18 |
142. Linked List Cycle II (0) | 2021.06.17 |