鍊錶翻轉
給出乙個鍊錶和乙個數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...