k個一組翻轉鍊錶

2021-09-01 18:40:08 字數 1390 閱讀 3320

題目描述:

給出乙個鍊錶,每 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 ...