假設(shè)我們要實(shí)現(xiàn)將節(jié)點(diǎn)s插入到節(jié)點(diǎn)p着茸、p->next之間,應(yīng)該如何實(shí)現(xiàn)呢?
下面我們先看一張簡(jiǎn)單的圖:
通過(guò)思考我們發(fā)現(xiàn)只需要做一點(diǎn)改變即可:
s->next? ?=? ?p->next ;
p->next? ?=? ?s;
是不是很簡(jiǎn)單,這樣p挽绩、p->next膛壹、s之間的關(guān)系邏輯圖就變成了下圖:
有人會(huì)問(wèn),s->next? ?=? ?p->next ;p->next? ?=? ?s;?
這兩句可以交換一下嗎?
我們先不急著說(shuō)結(jié)論唉堪,但分析一下如果交換的后模聋,會(huì)發(fā)生什么結(jié)果呢。
如果先執(zhí)行p->next = s唠亚;再執(zhí)行s->next = p->next;?
就會(huì)變成s->next = s; 這樣整個(gè)流程就成了一個(gè)死循環(huán)撬槽。
下面我總結(jié)一下單鏈表第i個(gè)數(shù)據(jù)插入結(jié)點(diǎn)的算法思路:
1.聲明一個(gè)結(jié)點(diǎn)p指向鏈表頭結(jié)點(diǎn),初始化j從1開(kāi)始趾撵;
2.當(dāng)j<1時(shí)侄柔,就遍歷鏈表,讓p的指針向后移動(dòng)占调,不斷指向下一個(gè)結(jié)點(diǎn)暂题,j累加1;
3.如果鏈表結(jié)尾p為空究珊,則說(shuō)明第i個(gè)元素不存在薪者;
4.否則查找成功,在系統(tǒng)中生成一個(gè)空節(jié)點(diǎn)s剿涮;
5.將數(shù)據(jù)元素e賦值給s->data;
6.執(zhí)行插入標(biāo)準(zhǔn)語(yǔ)句:s->next? ?=? ?p->next ;p->next? ?=? ?s;
7.返回插入成功標(biāo)識(shí)言津。
簡(jiǎn)單代碼實(shí)現(xiàn):
由興趣的朋友可以關(guān)注如下公眾號(hào)找尋資源哦~