鏈表的基本操作(C語言)詳解
學(xué)會創(chuàng)建鏈表之后,本節(jié)繼續(xù)講解鏈表的一些基本操作,包括向鏈表中添加數(shù)據(jù)、刪除鏈表中的數(shù)據(jù)、查找和更改鏈表中的數(shù)據(jù)。
首先,創(chuàng)建一個帶頭結(jié)點(diǎn)的鏈表,鏈表中存儲著 {1,2,3,4}:
鏈表插入元素
同順序表一樣,向鏈表中增添元素,根據(jù)添加位置不同,可分為以下 3 種情況:
插入到鏈表的頭部,作為首元節(jié)點(diǎn);
插入到鏈表中間的某個位置;
插入到鏈表的最末端,作為鏈表中最后一個結(jié)點(diǎn);
對于有頭結(jié)點(diǎn)的鏈表,3 種插入元素的實(shí)現(xiàn)思想是相同的,具體步驟是:
將新結(jié)點(diǎn)的 next 指針指向插入位置后的結(jié)點(diǎn);
將插入位置前結(jié)點(diǎn)的 next 指針指向插入結(jié)點(diǎn);
例如,在鏈表?{1,2,3,4}
?的基礎(chǔ)上分別實(shí)現(xiàn)在頭部、中間、尾部插入新元素 5,其實(shí)現(xiàn)過程如圖?1 所示:

從圖中可以看出,雖然新元素的插入位置不同,但實(shí)現(xiàn)插入操作的方法是一致的,都是先執(zhí)行步驟 1 ,再執(zhí)行步驟 2。實(shí)現(xiàn)代碼如下:
注意:鏈表插入元素的操作必須是先步驟 1,再步驟 2;反之,若先執(zhí)行步驟 2,除非再添加一個指針,作為插入位置后續(xù)鏈表的頭指針,否則會導(dǎo)致插入位置后的這部分鏈表丟失,無法再實(shí)現(xiàn)步驟 1。
對于沒有頭結(jié)點(diǎn)的鏈表,在頭部插入結(jié)點(diǎn)比較特殊,需要單獨(dú)實(shí)現(xiàn)。

和 2)、3) 種情況相比,由于鏈表沒有頭結(jié)點(diǎn),在頭部插入新結(jié)點(diǎn),此結(jié)點(diǎn)之前沒有任何結(jié)點(diǎn),實(shí)現(xiàn)的步驟如下:
將新結(jié)點(diǎn)的指針指向首元結(jié)點(diǎn);
將頭指針指向新結(jié)點(diǎn)。
實(shí)現(xiàn)代碼如下:
注意當(dāng) add==1 成立時(shí),形參指針 p 的值會發(fā)生變化,因此需要它的新值作為函數(shù)的返回值返回。
鏈表刪除元素
從鏈表中刪除指定數(shù)據(jù)元素時(shí),實(shí)則就是將存有該數(shù)據(jù)元素的節(jié)點(diǎn)從鏈表中摘除。
對于有頭結(jié)點(diǎn)的鏈表來說,無論刪除頭部(首元結(jié)點(diǎn))、中部、尾部的結(jié)點(diǎn),實(shí)現(xiàn)方式都一樣,執(zhí)行以下三步操作:
找到目標(biāo)元素所在結(jié)點(diǎn)的直接前驅(qū)結(jié)點(diǎn);
將目標(biāo)結(jié)點(diǎn)從鏈表中摘下來;
手動釋放結(jié)點(diǎn)占用的內(nèi)存空間;
從鏈表上摘除目標(biāo)節(jié)點(diǎn),只需找到該節(jié)點(diǎn)的直接前驅(qū)節(jié)點(diǎn) temp,執(zhí)行如下操作:
{1,2,3,4}
?的鏈表中刪除存儲元素 3 的結(jié)點(diǎn),則此代碼的執(zhí)行效果如圖 3 所示:
實(shí)現(xiàn)代碼如下:
對于不帶頭結(jié)點(diǎn)的鏈表,需要單獨(dú)考慮刪除首元結(jié)點(diǎn)的情況,刪除其它結(jié)點(diǎn)的方式和圖 3 完全相同,如下圖所示:

實(shí)現(xiàn)代碼如下:
鏈表查找元素
在鏈表中查找指定數(shù)據(jù)元素,最常用的方法是:從首元結(jié)點(diǎn)開始依次遍歷所有節(jié)點(diǎn),直至找到存儲目標(biāo)元素的結(jié)點(diǎn)。如果遍歷至最后一個結(jié)點(diǎn)仍未找到,表明鏈表中沒有存儲該元素。
因此,鏈表中查找特定數(shù)據(jù)元素的 C 語言實(shí)現(xiàn)代碼為:
鏈表更新元素
更新鏈表中的元素,只需通過遍歷找到存儲此元素的節(jié)點(diǎn),對節(jié)點(diǎn)中的數(shù)據(jù)域做更改操作即可。
直接給出鏈表中更新數(shù)據(jù)元素的 C 語言實(shí)現(xiàn)代碼:
總結(jié)
以上內(nèi)容詳細(xì)介紹了對鏈表中數(shù)據(jù)元素做"增刪查改"的實(shí)現(xiàn)過程及 C 語言代碼,最后給大家一段完整的代碼,實(shí)現(xiàn)對有頭結(jié)點(diǎn)鏈表的“增刪查改”:
初始化鏈表為:
1 2 3 4
在第 3 的位置上添加元素 6:
1 2 6 3 4
刪除元素4:
1 2 6 3
查找元素 2:
元素 2 的位置為:2
更改元素 1 的值為 6:
6 2 6 3