[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
leetcode:k個一組翻轉連結串列
題目說明:給出一個連結串列,每 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-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 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) ####