LeetCode(25)K個一組反轉鍊錶

2021-10-05 03:34:37 字數 1742 閱讀 2236

乙個體面人的刷題之旅

給你乙個鍊錶,每 k 個節點一組進行翻轉,請你返回翻轉後的鍊錶。

k 是乙個正整數,它的值小於或等於鍊錶的長度。

如果節點總數不是 k 的整數倍,那麼請將最後剩餘的節點保持原有順序。

首先,這是一道鍊錶反轉題目,我們要對操作動作資料結構的關聯敏感,一看到翻轉,就想到先進後出啊,這樣就順序反轉了不嘛!一提到先進後出!!------

既然讓我們每k個節點反轉那麼我們把原鍊錶的每k個節點依次入棧,在把我們k個節點依次出棧,迴圈這樣做,直到將所有的節點反轉完成,(這裡要考慮的是當剩餘的節點小於k時,我們就不改變順序了,所以這種情況是我們的乙個分支)。

talk is cheap,show me the code!

所有的鍊錶題我們都需要定義乙個啞巴節點來指向我們的入參節點,這樣我們在最後可以直接返回啞巴節點的next返回我們操作的煉表頭就可以了。(我開始的時候真的不懂為什麼,後來做多了慢慢就懂了。所以大家加油,別放棄 不會可以 多做幾遍,在不會 就在做,實在不行 鍛鍊身體 找阿姨去把

listnode dumy =

newlistnode(0

);dumy.next = head;

然後,這裡我們要定義乙個current節點,通過這個節點我們可以做到不改變dumy指標的情況下,對head進行翻轉。

listnode current = dumy;
這裡還需要定義個next節點,表示我們正在翻轉的節點,這個節點從我們要翻轉鍊錶的頭部開始。

listnode next = dumy.next
初始化乙個棧容器用來翻轉鍊錶

stack

context =

newstack

();

接下來就是遍歷節點,把它們放到棧裡,然後提取翻轉。

while

(next != null)

//判斷特殊情況,也就是放入棧中的節點數量小於k,說明我們遍歷到最後了,剩餘的節點不滿足一次翻轉的數量,我們直接返回dumy.next,終止操作就可以了。

if(context.

size()

!= k)

return dumy.next;

//出棧,翻轉,

while

(context.

size()

!=0)//這裡是將當前節點指向剩餘未翻轉節點,這樣我們在如果剩餘長度不滿足k的情況下就可以直接返回了。

current.next = next;

}

class

solution

if(context.

size()

!= k)

return dumy.next;

while

(context.

size()

!=0) current.next = next;

}return dumy.next;

}}

大家考慮下,我們可不可以不用額外空間實現呢?

大家考慮下,我們可不可以不用額外空間實現呢?

待續。。。

LeetCode 25 k個一組翻轉鍊錶

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

LeetCode 25 K個一組翻轉鍊錶

按照每k個為一組,記錄這組內的頭和尾,第一組只需記錄翻轉後的尾即tail 接下來的每一組記錄翻轉後頭 nhead 和尾 ntail.注意更新的順序 class solution length k if length 0 return head p head listnode otail head l...

leetcode 25 k個一組翻轉鍊錶

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