Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- ebs
- AWS
- intervals
- IAM
- EKS
- elasticsearch
- leetcode
- kernel
- dockerfile
- docker
- Deployment
- 쿠버네티스
- YAML
- 자바스크립트
- Django
- IAC
- ansible
- asgi
- POD
- Python
- Kubernetes
- K8S
- FastAPI
- event loop
- EC2
- terraform
- github
- Service
- WSGI
- asyncio
Archives
- Today
- Total
궁금한게 많은 개발자 노트
[ leetcode ] 24. Swap Nodes in Pairs 본문
해당 문제는 Recursion을 사용하여 재귀적으로 같은 문제를 해결할 수 있는지를 판단하는 문제로 보였습니다.
Linked List가 주어졌을 때, 서로 인접한 두개의 노드의 순서가 변경된 결과를 반환하는 문제입니다.
ex) 1 -> 2 -> 3 -> 4
2 -> 1 -> 4 -> 3
작은 단위로 쪼개보면 인접한 두개의 노드가 서로 자리를 바꾸는 연산이 반복해서 일어나므로 재귀적으로 해결한다면 다음과 같은 코드로 풀이할 수 있습니다.
첫 번째 노드가 current, 두 번째 노드가 next라고 한다면 결과적으로 next->next는 current를 가리키고, current->next는 다음 두 노드의 변경된 첫 번째 노드를 가리켜야 합니다.
다음 두 노드의 결과는 swapPairs(next->next)가 되므로 아래 코드가 나오게 됩니다.
/**
* 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* swapPairs(ListNode* head) {
if (head == NULL || head->next == NULL) return head;
ListNode* current = head;
ListNode* next = current->next;
current->next = swapPairs(next->next);
next->next = current;
return next;
}
};
'Algorithm' 카테고리의 다른 글
[ leetcode ] 21. Merge Two Sorted Lists (0) | 2023.07.07 |
---|---|
[ leetcode ] 104. Maximum Depth of Binary Tree (0) | 2023.07.07 |
[ leetcode ] 859. Buddy Strings (0) | 2023.07.07 |
[ leetcode ] 112. Path Sum (0) | 2023.05.09 |
[ leetcode ] 78. Subsets (0) | 2023.05.02 |
Comments