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...