leetcode 25 k個一組翻轉鏈表

給你一個鏈表,每 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;
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章