免費開始練習
高考申論題 106年 [資訊處理] 資料結構

第 二 題

📖 題組:
給定如下圖所示之兩個環狀單向鏈結串列(circular singly linked list),並以 A,B 分別指向其中兩個串列中的一個節點,另有一個指標 C 可以使用。請用類 C 之虛擬語言(C-like pseudo code)完成下列動作。 (一)請用至多二行虛擬碼程式刪除 C 所指向節點。結果必須維持環狀單向鏈結串列。(5 分) (二)請用至多二行虛擬碼程式將 B 所指向串列插入 A 所指向串列。結果必須維持環狀單向鏈結串列。(10 分) (三)請用至多四行虛擬碼程式寫出可將 B 所指向節點插入至 A 所指向節點之「前」,但必須維持環狀單向鏈結串列。(15 分)
題組圖片
📝 此題為申論題,共 3 小題

小題 (二)

請用至多二行虛擬碼程式將 B 所指向串列插入 A 所指向串列。結果必須維持環狀單向鏈結串列。(10 分)

思路引導 VIP

解決環狀單向串列的 O(1) 合併問題,核心在於「交叉連接」。透過交換 A->linkB->link,即可將 B 串列完美嵌入 A 串列中。配合題目提示「有指標 C 可以使用」,利用 C 作為暫存變數,並運用逗號運算子將敘述壓縮至兩行內。

🤖
AI 詳解
AI 專屬家教

【解題思路】環狀單向串列的 O(1) 合併核心在於打斷原本的連結並「交叉相連」。只需交換 A->linkB->link 的指標位址,即可將 B 串列完整嵌入 A 串列中。 【解答】 利用題目提供的指標 C 作為暫存變數,並以逗號將賦值敘述合併於兩行內完成:

小題 (一)

請用至多二行虛擬碼程式刪除 C 所指向節點。結果必須維持環狀單向鏈結串列。(5 分)

思路引導 VIP

在單向鏈結串列中刪除節點的關鍵,是必須掌握欲刪除節點的「前驅節點(previous node)」。觀察圖示可知,指標 A 恰好指向指標 C 的前驅節點,因此只需修改 A 的指標欄位跳過 C,再將 C 的記憶體釋放即可。

🤖
AI 詳解
AI 專屬家教

【解題關鍵】刪除單向鏈結串列的節點需透過其「前驅節點」來修改指標,由圖可知節點 A 恰為節點 C 的前驅節點。 【解答】

小題 (三)

請用至多四行虛擬碼程式寫出可將 B 所指向節點插入至 A 所指向節點之「前」,但必須維持環狀單向鏈結串列。(15 分)

思路引導 VIP

本題考查單向鏈結串列的經典 O(1) 插入技巧(Value Swapping)。由於單向串列無法直接取得節點的前驅,要在節點 A 之前插入節點 B,必須先將 B 插入到 A 的『後方』,再『交換兩者的資料』,即可在邏輯上達成前插的效果並維持環狀。

🤖
AI 詳解
AI 專屬家教

【解題關鍵】利用「值交換(Value Swapping)」移花接木技巧,先將節點 B 插入至節點 A 之後,再互換兩者資料。 【解答】 虛擬碼(C-like pseudo code)如下:

📝 同份考卷的其他題目

查看 106年[資訊處理] 資料結構 全題