鍊錶翻轉(每K個結點進行一次逆置)

2021-08-04 05:42:32 字數 965 閱讀 4187

鍊錶翻轉

給出乙個鍊錶和乙個數k,比如鍊錶1→2→3→4→5→6

若k=2,翻轉後2→1→4→3→6→5,

若k=3,翻轉後3→2→1→6→5→4,

若k=4,翻轉後4→3→2→1→5→6,

用程式實現node* rotatelist(node* list, size_t k). 

我的思路是把每k個結點的逆置成的鍊錶都當成一條新的鍊錶,所以共有m=size/k條,然後再用上一條鍊錶的尾tail和當前鍊錶的頭newlist連線起來。所以要把每條鍊錶的尾儲存起來,但是我們知道這是鍊錶的逆置,所以還未逆置的部分的頭就是下條鍊錶的尾,也就是**中的head。最後再把剩下的煉錶鏈在新鍊錶的尾部即可。

//逆置鍊錶k

plist* rotatelist(plist* pplist, size_t k)

pnode cur = *pplist;

pnode tail = cur; //儲存當前鍊錶的尾結點

plist* head = pplist; //返回值,儲存整個鍊錶的首節點

for (int i = 0; i < m; i++)//迴圈逆置m條鍊錶

if (i == 0) //第一條逆置的新鍊錶要做整個鍊錶的頭

else //上條鍊錶的尾和新鍊錶鏈結起來

}while (cur) //將剩餘的不夠k個的結點鏈在已經逆置好鍊錶的尾部

return head;

}

測試:對一條鍊錶進行多次逆置

鍊錶中的節點每k個一組翻轉

題目描述 將給出的鍊錶中的節點每 k 個一組翻轉,返回翻轉後的鍊錶 如果鍊錶中的節點數不是 k 的倍數,將最後剩下的節點保持原樣 你不能更改節點中的值,只能更改節點本身。要求空間複雜度 o 1 例如 給定的鍊錶是1 2 3 4 5 對於 k 2 你應該返回 2 1 4 3 5 對於 k 3,你應該返...

k個一組翻轉鍊錶

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

K 個一組翻轉鍊錶

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