具體題目詳解:
給出乙個鍊錶和乙個數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,
解決思路:
先分析題目,當節點數有k個時,逆置長度為k的鍊錶,當節點數不足k時,則不做任何處理。
總的思路為:將長度為k的子鍊錶從原煉表中拿出,然後逆置,最後將逆置後的子鍊錶再連線回原鍊錶中。
我的解決方法是:編寫輔助的兩個函式,乙個是鍊錶逆置的。另乙個是獲得鍊錶最後乙個的。
具體**如下:
//斷開k長的鍊錶,逆置後,再插回原煉表中
node* rotatelist(node* phead, size_t k)
//如果pcur為空退出迴圈,說明不夠k個節點,所以不用逆置
if(pcur)
else
break;
} return phead;
}//採用頭插法逆置鍊錶
node* reverse_list(node* phead)
pcur->next=pnewhead;
pnewhead=pcur;
return pnewhead;
}//獲得鍊錶中最後乙個節點
node* get_last_node(node* phead)
總結:鍊錶翻轉,思路簡單,但是編寫**過程中,細節較多,需要注意。比如說,取出鍊錶時,要儲存它的前乙個節點和後乙個節點,保證逆置後,可以放回到原煉表中。 資料結構69 鍊錶逆置,鍊錶反轉,鍊錶翻轉
鍊錶翻轉,簡單地理解,就是將鍊錶的頭部結點變為鍊錶的尾部結點,與此同時將原鍊錶的尾部結點變成頭部結點。如下圖所示 圖 1 鍊錶翻轉示意圖 將鍊錶進行翻轉的方法有多種,本節給大家介紹兩種實現方法。實現鍊錶翻轉最直接的方法就是 從鍊錶的頭部開始遍歷每個結點,改變每個結點的指向,即將原本指向下乙個結點的指...
鍊錶之鍊錶的逆置
題目 資料結構實驗之鍊表三 鍊錶的逆置 time limit 1000 ms memory limit 65536 kib submit statistic discuss problem description 輸入多個整數,以 1作為結束標誌,順序建立乙個帶頭結點的單鏈表,之後對該單鏈表的資料進...
鍊錶的逆置
5.鍊錶的逆置 已知head指向乙個帶頭節點的單向鍊錶,鍊錶中每個結點包含資料域和指標域。用鍊錶實現該鍊錶的逆置,並輸出。例如 輸入 5 整數表示要輸入的字元個數 abcde 輸出 edcba 注意 不允許通過改變每個節點的資料域來實現效果,必須改變鍊錶連線順序發生逆置。我寫的 如下 include...