1. 程式人生 > >[LeetCode]k個一組翻轉連結串列(Reverse Nodes in k-Group)

[LeetCode]k個一組翻轉連結串列(Reverse Nodes in k-Group)

題目描述

給出一個連結串列,每 k 個節點一組進行翻轉,並返回翻轉後的連結串列。

k 是一個正整數,它的值小於或等於連結串列的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。

示例 :

給定這個連結串列:1->2->3->4->5

當 k = 2 時,應當返回: 2->1->4->3->5

當 k = 3 時,應當返回: 3->2->1->4->5

說明 :

  • 你的演算法只能使用常數的額外空間。
  • 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。

ListNode結構

class ListNode
{ int val; ListNode next; ListNode(int x) { val = x; } }

解決方法

使用4個指標反轉連結串列

  • start下一次迴圈的開始節點
  • kStep提前走k步
  • cur當前要移動的節點
  • pre固定的開始節點

例如:
list = 1 -> 2 -> 3 -> 4 -> 5, k = 3

首先使用虛擬頭節點簡化操作
dummy  ->  1  ->  2  ->  3  ->  4  ->  5

第一次反轉連結串列過程如下
dummy  ->  1  ->  2  ->  3  ->  4  ->  5
 pre      cur          kStep
         start

dummy  ->  2  ->  3  ->  1  ->  4  ->  5
 pre      cur   kStep  start

dummy  ->  3  ->  2  ->  1  ->  4  ->  5
 pre      cur          start
         kStep

第二次反轉遍歷過程如下
dummy  ->  3  ->  2  ->  1  ->  4  ->  5  ->  null
                        pre   start           kStep

kStep為null退出迴圈
    public ListNode reverseKGroup(ListNode head, int k) {
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        ListNode start = dummy;
        while (true) {
            ListNode kStep = start, pre = start, cur;
            start = pre.next;
            for (int i = 0; i < k &&
kStep != null; i++) kStep = kStep.next; if (kStep == null) break; for (int i = 0; i < k - 1; i++) { cur = pre.next; pre.next = cur.next; cur.next = kStep.next; kStep.next = cur; } } return dummy.next; }

相關推薦

LeetCode 25. k翻轉連結串列Reverse Nodes in k-Group

題目描述   給出一個連結串列,每 k 個節點一組進行翻轉,並返回翻轉後的連結串列。 k 是一個正整數,它的值小於或等於連結串列的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。 示例 : 給定這個連結串列:1->

[LeetCode]k翻轉連結串列Reverse Nodes in k-Group

題目描述 給出一個連結串列,每 k 個節點一組進行翻轉,並返回翻轉後的連結串列。 k 是一個正整數,它的值小於或等於連結串列的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。 示例 : 給定這個連結串列:1->2->3->

LeetCode題解】25_k翻轉連結串列Reverse-Nodes-in-k-Group

目錄 描述 解法一:迭代 思路 Java 實現 Python 實現 複雜度分析 解法二:遞迴(不滿足空間複雜度) 思路 Java 實現 Python 實現 複雜度分析 更多 LeetCode

LeetCode 25. k翻轉鏈表Reverse Nodes in k-Group

lse etc list listnode else 保存 進行 family 示例 題目描述 給出一個鏈表,每 k 個節點一組進行翻轉,並返回翻轉後的鏈表。 k 是一個正整數,它的值小於或等於鏈表的長度。如果節點總數不是 k 的整數倍,那麽將最後剩余節點保持原有順序。

Leetcode 25:k翻轉連結串列最詳細解決方案!!!

給出一個連結串列,每 k 個節點一組進行翻轉,並返回翻轉後的連結串列。 k 是一個正整數,它的值小於或等於連結串列的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。 示例 : 給定這個連結串列:1->2->3->4-

Leetcode篇:k翻轉連結串列

@author: ZZQ @software: PyCharm @file: ReverseList.py @time: 2018/11/6 15:13 題目要求:給出一個連結串列,每 k 個節點一組進行翻轉,並返回翻轉後的連結串列。 k 是一個正整數,它的值小於或等於連結串列的長度。如果節點總數不是 k

leetcodek翻轉連結串列

題目說明:給出一個連結串列,每 k 個節點一組進行翻轉,並返回翻轉後的連結串列。 k 是一個正整數,它的值小於或等於連結串列的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。 示例 : 給定這個連結串列:1->2->3->4->5 當 k

leetcode題庫——k翻轉連結串列

題目描述: 給出一個連結串列,每 k 個節點一組進行翻轉,並返回翻轉後的連結串列。 k 是一個正整數,它的值小於或等於連結串列的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。 示例 : 給定這個連結串列:1

LeetCode-25. k翻轉連結串列

題目 給出一個連結串列,每 k 個節點一組進行翻轉,並返回翻轉後的連結串列。 k 是一個正整數,它的值小於或等於連結串列的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。 示例 : 給定這個連結串列:1->2->3->4->5

Leetcode(25) K翻轉連結串列

題目描述 給出一個連結串列,每 k 個節點一組進行翻轉,並返回翻轉後的連結串列。 k 是一個正整數,它的值小於或等於連結串列的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。 示例 : 給定這個連結串列:1->2->3->4->5 當 k = 2

LeetCode 25 —— K 翻轉連結串列

1. 題目 2. 解答 首先,利用快慢指標確定連結串列的總結點數。 偶數個結點時,結點個數等於 i * 2。 奇數個結點時,結點個數等於 i * 2 + 1。 然後將連結串列的每

leetcode 25:k翻轉連結串列

建立一個數組,存放k個節點,之後進行改變順序即可 ListNode* reverseKGroup(ListNode* head, int k) { if (k == 1) return head; int i = 0; ListNode*l1 =

每日題--LeetCode 25 k翻轉連結串列java

題目描述: 給出一個連結串列,每 k 個節點一組進行翻轉,並返回翻轉後的連結串列。 k 是一個正整數,它的值小於或等於連結串列的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。 示例 : 給定這個連結串列:1->2->3->4-

[LeetCode] Reverse Nodes in k-Groupk翻轉連結串列

Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. k is a positive integer and is less than or equal to t

Leetcode做題日記:25. k翻轉連結串列(PYTHON)

給出一個連結串列,每 k 個節點一組進行翻轉,並返回翻轉後的連結串列。 k 是一個正整數,它的值小於或等於連結串列的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。 示例 : 給定這個連結串列:1->2->3->4->5 當 k = 2 時,應當

LeetCode 25 — Reverse Nodes in k-Group(k翻轉連結串列)

Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. k is a positive integer and is le

[LeetCode]25. Reverse Nodes in k-Group k翻轉連結串列

Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. k is a positive integer and is less than or equ

[leetcode-連結串列]25. k翻轉連結串列

給出一個連結串列,每 k 個節點一組進行翻轉,並返回翻轉後的連結串列。 k 是一個正整數,它的值小於或等於連結串列的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。 示例 : 給定這個連結串列:1->2->3->4->5

LeetCode】25. k翻轉連結串列 結題報告 (C++)

題目描述:給出一個連結串列,每 k 個節點一組進行翻轉,並返回翻轉後的連結串列。k 是一個正整數,它的值小於或等於連結串列的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。示例 :給定這個連結串列:1->2->3->4->5當 k

LeetCode 25. K 翻轉連結串列 | Python

### 25. K 個一組翻轉連結串列 --- 題目來源:[https://leetcode-cn.com/problems/reverse-nodes-in-k-group](https://leetcode-cn.com/problems/reverse-nodes-in-k-group) ####