怎么寫好鏈表代碼
理解指針或引用的含義
指針存儲(chǔ)了指定變量的內(nèi)存地址宋列,通過指針就能找到這個(gè)變量
p -> next = q
代表p節(jié)點(diǎn)的next指針中存儲(chǔ)了q節(jié)點(diǎn)的內(nèi)存地址
常用的還有p->next=p->next->next
直接把p的next指針指向p節(jié)點(diǎn)的下下一個(gè)加點(diǎn)的內(nèi)存警惕指針丟失和內(nèi)存泄露
插入節(jié)點(diǎn)時(shí)一定要注意操作順序嗡靡,在a捧毛、b節(jié)點(diǎn)中插入c節(jié)點(diǎn)時(shí)藕咏,必須先把c的next指向b方庭,再把a(bǔ)的next指向c练对。
同時(shí)刪除鏈表節(jié)點(diǎn)時(shí)也記得手動(dòng)釋放內(nèi)存空間来农。-
利用哨兵簡(jiǎn)化實(shí)現(xiàn)難度
無論插入鏈表的第一個(gè)節(jié)點(diǎn)還是刪除鏈表的最后一個(gè)節(jié)點(diǎn),我們都需要特殊處理乘盼,為了避免和簡(jiǎn)化操作升熊,引入了哨兵概念。它不參與業(yè)務(wù)邏輯绸栅,只解決邊界問題级野。
如果鏈表中存在哨兵節(jié)點(diǎn),它會(huì)被稱作帶頭鏈表粹胯,相反蓖柔,沒有哨兵節(jié)點(diǎn)的鏈表被叫做不帶頭鏈表。
-
重點(diǎn)留意邊界
- 如果鏈表為空风纠,代碼是否正常况鸣?
- 如果鏈表只有一個(gè)節(jié)點(diǎn),代碼是否正常竹观?
- 如果鏈表只有兩個(gè)節(jié)點(diǎn)時(shí)懒闷,代碼是否正常?
- 代碼處理頭結(jié)點(diǎn)和尾結(jié)點(diǎn)時(shí)栈幸,是否正常?
舉例畫圖帮辟,輔助思考
在寫的同時(shí)在草稿上列出具體內(nèi)容或者畫出相關(guān)的節(jié)點(diǎn)增減速址,這能有效幫助構(gòu)筑具體的操作步驟-
多寫多練,沒有捷徑
多寫由驹,熟練以下內(nèi)容- 單鏈表反轉(zhuǎn) 206
- 鏈表中環(huán)的檢測(cè) 141
- 兩個(gè)有序的鏈表合并 21
- 刪除鏈表倒數(shù)第 n 個(gè)結(jié)點(diǎn) 19
- 求鏈表的中間結(jié)點(diǎn) 876
此文章為2月Day4學(xué)習(xí)筆記芍锚,內(nèi)容來源與極客時(shí)間《數(shù)據(jù)結(jié)構(gòu)與算法之美》