在主題列表的臉,大部分的人(包含自己)他們是非常膽小,由於這是必然要面對的指標。
今天,我意識到一些議題上的列表操作。
首先,定義單鏈表中的節點:
注:上述的刪除鍊錶函式是必須的。否則記憶體洩露將會是最大的問題。
[updated]:上述刪除鍊錶的操作是有問題的,傳入的引數必須是指標的指標或者是引用。或者返回head。由於須要將head指標置為空。這利用傳值呼叫是辦不到的。
接下來。定義鍊錶的一些操作:
1 返回倒數第k個節點:
//有待更新
2 逆置鍊錶;依次取出原煉表中的元素,將其插入到新鍊錶的頭部.
注意。在逆置單鏈表的過程中,我犯了乙個錯誤,見上述**凝視:
3 推斷鍊錶是否是回文:
當然,推斷回文還有其它方法,只是我僅僅想到這個,就直接實現了。
4 將鍊錶的元素依據某個pivot進行partition,這能夠用作鍊錶快排的函式。
5 將兩個鍊錶中的元素相加,分為兩個版本號,第乙個是:
高位在表頭。那麼先將鍊錶長度補成一致,再進行遞迴呼叫就可以。
低位在表頭。
直接相加就可以,僅僅須要處理最後元素可能的進製!!
6 推斷乙個鍊錶中是否有環,假設有。返回環的起點。假設沒有,直接返回,
首先。推斷乙個鍊錶是否有環,典型的追及問題,乙個快指標fast,每次走兩步,慢指標slow,每次走一步。
假設存在環,則慢指標一定會在進入環的第一圈內就與快指標相遇。假設不是第一圈,也就意味著,慢指標在第一圈時,會被快指標追上
並超過,顯然是不可能的。假設在點i處超越,那麼此時慢指標在i處,快指標在i+1處,那麼前一步。快指標在i-1處。慢指標也在i-1處。這
與「指標不相遇」如果矛盾。
上述程式有些繁瑣,特別是在處理 fast與slow的關係時,以下的**比較簡單也比較直觀
ps:全部**的易錯點均在**凝視中~~~~
資料結構實驗之排序七 選課名單
隨著學校規模的擴大,學生人數急劇增加,選課名單的輸出也成為乙個繁重的任務,我校目前有在校生3萬多名,兩千多門課程,請根據給定的學生選課清單輸出每門課的選課學生名單。輸入第一行給出兩個正整數n n 35000 和m m 2000 其中n是全校學生總數,m是課程總數,隨後給出n行,每行包括學生姓名拼音 ...
資料結構實驗之排序七 選課名單
time limit 1000ms memory limit 65536k 隨著學校規模的擴大,學生人數急劇增加,選課名單的輸出也成為乙個繁重的任務,我校目前有在校生3萬多名,兩千多門課程,請根據給定的學生選課清單輸出每門課的選課學生名單。輸入第一行給出兩個正整數n n 35000 和m m 200...
資料結構實驗之排序七 選課名單
資料結構實驗之排序七 選課名單 time limit 1000ms memory limit 65536k 隨著學校規模的擴大,學生人數急劇增加,選課名單的輸出也成為乙個繁重的任務,我校目前有在校生3萬多名,兩千多門課程,請根據給定的學生選課清單輸出每門課的選課學生名單。輸入第一行給出兩個正整數n ...