먼저 list를 reverse하는 함수를 만들고, K개의 node를 만나면 reverse를 한다. reverse한 node의 마지막을 저장하여, 다음번 reverse를 하게 되면 이 둘을 이어준다.
class Solution {
public ListNode reverse(ListNode head) {
int n = 0;
ListNode cur = head;
if (head == null) {
return null;
}
while (cur != null) {
n++;
cur = cur.next;
}
if (n == 1) {
return head;
}
cur = head;
ListNode prev = null;
ListNode next = null;
while (cur != null) {
next = cur.next;
cur.next = prev;
prev = cur;
cur = next;
}
head.next = null;
return prev;
}
public ListNode reverseKGroup(ListNode head, int k) {
ListNode cur = head;
int num = 1;
ListNode next = null;
ListNode answer = null;
ListNode prevReverseNode = null;
while (cur != null) {
if (num == k) {
next = cur.next;
cur.next = null;
ListNode reverseNode = reverse(head);
if (prevReverseNode != null) {
for (int i = 0; i < k - 1; i++) {
prevReverseNode = prevReverseNode.next;
}
prevReverseNode.next = reverseNode;
} else {
answer = reverseNode;
}
prevReverseNode = reverseNode;
num = 1;
cur = next;
head = cur;
} else {
num++;
cur = cur.next;
}
}
if (num <= k) {
if (prevReverseNode != null) {
for (int i = 0; i < k - 1; i++) {
prevReverseNode = prevReverseNode.next;
}
prevReverseNode.next = head;
}
}
return answer;
}
}
반응형
'Algorithm > LeetCode' 카테고리의 다른 글
[Java] LeetCode 34번 Find First and Last Position of Element in Sorted Array (0) | 2021.10.03 |
---|---|
[Java] LeetCode 33번 Search in Rotated Sorted Array (0) | 2021.10.02 |
[Java] LeetCode 23번 Merge k Sorted Lists (0) | 2021.09.29 |
[Java] LeetCode 22번 Generate Parentheses (0) | 2021.09.28 |
[Java] LeetCode 21번 Merge Two Sorted Lists (0) | 2021.09.28 |