演算法設計與分析 第十二周 k個一組翻轉鍊錶

2021-09-01 16:16:32 字數 1491 閱讀 5004

4 關鍵**

5 執行結果

6 源**

講道理這個周確實沒講啥東西…秉承著隨機的原則,在首頁閉著眼睛點了一下滑鼠,選中了這道題。

分析這道題目,其實是比較簡單的。涉及的操作無非就是節點的轉移,思考清楚就沒有太大的難度。

看這道題,說白了就是將不同段的節點顛倒過來,其實實現起來很簡單。我們先看一段鍊錶的倒置

當我們要倒置的時候,應該是從頭節點開始,依次將頭節點放在最後。例如上圖,我們從1開始,先使用乙個指標指向2,接著將1節點放在佇列的最後(該節點下乙個節點稍後會說),接著,將頭節點更新為指標指向的節點(即節點2)。

演算法如下:

for i = 1: k

temp = head -> next;

head -> next = tail;

tail = head;

endfor

接下來,我們要考慮的問題是:先調換前面的組還是先調換後面的組。

仔細觀察一下。當前組的首節點會被放在最後,和下乙個組的首節點相接,而下一組的首節點是什麼?取決於我們的調換順序。如果我們從前往後調換,那麼這一組會在下一組首節點被放在最後之前連線上!而如果我們從後往前調換,就會在下一組調換完成連線上節點,也正是正常順序!

//反轉節點

while (count > 0)

while (next_head != null && count != k) 

//遞迴後面的組先反轉,用反轉後新的頭作為自己尾節點的下乙個節點

//遞迴後面的組先反轉,用反轉後新的頭作為自己尾節點的下乙個節點

if (count == k)

//指向新的頭

head = next_head;

}return head;}};

《演算法設計與分析》第十二周作業

標籤 空格分隔 課堂作業 姓名 李 學號 16340114 題目 burst balloons 給定一串數字,每個數字代表乙個氣球,每個氣球都有乙個數值。每次扎破乙個氣球,可以得到該氣球左邊和右邊以及自身數字之積的硬幣,若果左 右沒有氣球,其數值為1。求能拿到的最大硬幣數 這個題目可以先從最簡單的情...

第十二周專案一Kruskal演算法的驗證

include include include a.h 功能 由乙個反映圖中頂點鄰接關係的二維陣列,構造出用鄰接矩陣儲存的圖 引數 arr 陣列名,由於形式引數為二維陣列時必須給出每行的元素個數,在此將引數arr宣告為一維陣列名 指向int的指標 n 矩陣的階數 g 要構造出來的鄰接矩陣資料結構 v...

演算法 K 個一組翻轉鍊錶

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