題目描述:給出乙個鍊錶,每 k 個節點一組進行翻轉,並返回翻轉後的鍊錶。
k 是乙個正整數,它的值小於或等於鍊錶的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。
示例 :給定這個鍊錶:當看到這道題目的時候,我們應該首先想到把鍊錶進行分組來逐個翻轉。1->2->3->4->5
當 k = 2 時,應當返回:2->1->4->3->5
當 k = 3 時,應當返回:3->2->1->4->5
這個時候就需要用到遞迴,把大的問題化為小問題,採用「分治」的思想。
但是在寫**之前,我們應該考慮到以下幾點:
1.如果鍊錶是空鍊錶,直接返回null;
2.如果鍊錶的長度小於 k ,直接返回該鍊錶;
3.需要三個節點,prev,node,next,乙個指向當前節點的前乙個,乙個是當前節點,乙個指向當前節點的後乙個;
4.需要乙個 last 節點記錄上一組翻轉的節點翻轉之前的最後乙個節點。
上**:
/**
* definition for singly-linked list.
* public class listnode
* }*/class solution
int size = 0;
//計算鍊錶的長度
for(listnode tmp = head; tmp != null; tmp = tmp.next)
//如果長度小於k,直接返回,不需要進行翻轉
if(size < k)
listnode node = head;
int pos = k;
listnode newhead = null;
listnode prev = null;
listnode next = null;
while(pos >= 1)
node.next = prev;
prev = node;
node = next;
}listnode last = newhead; //記錄上一組翻轉的最後乙個節點
K 個一組翻轉鍊錶
給你乙個鍊錶,每 k 個節點一組進行翻轉,請你返回翻轉後的鍊錶。k 是乙個正整數,它的值小於或等於鍊錶的長度。如果節點總數不是 k 的整數倍,那麼請將最後剩餘的節點保持原有順序。示例 給定這個鍊錶 1 2 3 4 5 當 k 2 時,應當返回 2 1 4 3 5 當 k 3 時,應當返回 3 2 1...
K個一組翻轉鍊錶
難度困難416收藏分享切換為英文關注反饋 給你乙個鍊錶,每 k 個節點一組進行翻轉,請你返回翻轉後的鍊錶。k 是乙個正整數,它的值小於或等於鍊錶的長度。如果節點總數不是 k 的整數倍,那麼請將最後剩餘的節點保持原有順序。示例 給你這個鍊錶 1 2 3 4 5 當 k 2 時,應當返回 2 1 4 3...
K 個一組翻轉鍊錶
給你乙個鍊錶,每 k 個節點一組進行翻轉,請你返回翻轉後的鍊錶。k 是乙個正整數,它的值小於或等於鍊錶的長度。如果節點總數不是 k 的整數倍,那麼請將最後剩餘的節點保持原有順序。給你這個鍊錶 1 2 3 4 5 當 k 2 時,應當返回 2 1 4 3 5 當 k 3 時,應當返回 3 2 1 4 ...