給你一個鏈表,每 k 個節點一組進行翻轉,請你返回翻轉後的鏈表。
k 是一個正整數,它的值小於或等於鏈表的長度。
如果節點總數不是 k 的整數倍,那麼請將最後剩餘的節點保持原有順序。
class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
ListNode prev = null;
ListNode cur = head;
ListNode next = null;
ListNode check = head;
int canProceed = 0;
int count = 0;
// 檢查鏈表長度是否滿足翻轉
while (canProceed < k && check != null) {
check = check.next;
canProceed++;
}
// 滿足條件,進行翻轉
if (canProceed == k) {
while (count < k && cur != null) {
next = cur.next;
cur.next = prev;
prev = cur;
cur = next;
count++;
}
if (next != null) {
// head 爲鏈表翻轉後的尾節點
head.next = reverseKGroup(next, k);
}
// prev 爲鏈表翻轉後的頭結點
return prev;
} else {
// 不滿住翻轉條件,直接返回 head 即可
return head;
}
}
}