[문제]
https://leetcode.com/problems/reverse-nodes-in-k-group/description/

[풀이]
문제 설명 (의역)
연결 리스트와 정수 k가 주어졌을 때,리스트를 k개 단위로 묶어서 각 그룹을 뒤집고,
그 결과 리스트를 반환하라.
단:
- 노드 개수가 k보다 작으면 뒤집지 않음
- 노드는 값을 바꾸지 말고 링크를 바꾸라
핵심 아이디어
- 전체를 k개씩 그룹으로 나누어 처리
- 각 그룹은 노드 연결을 반전(reverse)
- 마지막 그룹이 k개보다 작으면 그대로 둠
시간 및 공간 복잡도
- 시간 : O(n). 모든 노드 한번씩 순회
- 공간 : O(1). 재귀 안 쓰고 포인터만 사용함
[코드]
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
if(head == null || k == 1) return head;
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode prevGroupEnd = dummy;
while(true) {
ListNode kth = getKth(prevGroupEnd , k);
if(kth == null) break;
ListNode start = prevGroupEnd.next;
ListNode nextGroupStart = kth.next;
ListNode prev = nextGroupStart;
ListNode cur = start;
while(cur != nextGroupStart) {
ListNode temp = cur.next;
cur.next = prev;
prev = cur;
cur = temp;
}
prevGroupEnd.next = kth;
prevGroupEnd = start;
}
return dummy.next;
}
public ListNode getKth(ListNode node, int k) {
while(node != null && k > 0) {
node = node.next;
k--;
}
return node;
}
}'알고리즘 > leetCode' 카테고리의 다른 글
| [리트코드/LeetCode] 2. Add Two Numbers (0) | 2025.07.04 |
|---|---|
| [리트코드/LeetCode] 146. LRU Cache (0) | 2025.07.04 |
| [리트코드/LeetCode]138. Copy List with Random Pointer (0) | 2025.07.04 |
| [리트코드/LeetCode] 142. Linked List Cycle II (0) | 2025.07.04 |
| [리트코드/LeetCode]148. Sort List (0) | 2025.07.04 |






