鏈表刪除最后一個(gè)節(jié)點(diǎn) 試編寫一個(gè)在循環(huán)雙向鏈表中進(jìn)行刪除操作的算法,要求刪除的結(jié)點(diǎn)是指定結(jié)點(diǎn)p的前趨結(jié)點(diǎn)(自己創(chuàng)建鏈表)?
試編寫一個(gè)在循環(huán)雙向鏈表中進(jìn)行刪除操作的算法,要求刪除的結(jié)點(diǎn)是指定結(jié)點(diǎn)p的前趨結(jié)點(diǎn)(自己創(chuàng)建鏈表)?要?jiǎng)h除P節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn),首先定義一個(gè)前驅(qū)節(jié)點(diǎn),該前驅(qū)節(jié)點(diǎn)的節(jié)點(diǎn)q為P,它有如下關(guān)系:q->pre
試編寫一個(gè)在循環(huán)雙向鏈表中進(jìn)行刪除操作的算法,要求刪除的結(jié)點(diǎn)是指定結(jié)點(diǎn)p的前趨結(jié)點(diǎn)(自己創(chuàng)建鏈表)?
要?jiǎng)h除P節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn),首先定義一個(gè)前驅(qū)節(jié)點(diǎn),該前驅(qū)節(jié)點(diǎn)的節(jié)點(diǎn)q為P,它有如下關(guān)系:q->pre->next=P,P->pre=q->pre,然后刪除q節(jié)點(diǎn)。#包括
動(dòng)力來自積分,伙計(jì)。刪除節(jié)點(diǎn)非常容易。以單鏈表為例,記住三點(diǎn),避免斷鏈。刪除節(jié)點(diǎn)后,上一個(gè)節(jié)點(diǎn)的p->下一個(gè)節(jié)點(diǎn)必須指向下一個(gè)節(jié)點(diǎn)(如果是頭節(jié)點(diǎn),請(qǐng)記住將新的頭p指向原始的第二個(gè)節(jié)點(diǎn))。如果是尾部節(jié)點(diǎn),請(qǐng)記住將新的尾部節(jié)點(diǎn)p->next設(shè)置為null。要避免使用通配符指針,請(qǐng)?jiān)趧h除節(jié)點(diǎn)后,P->next=null;要避免內(nèi)存泄漏,請(qǐng)刪除節(jié)點(diǎn),使用free釋放堆內(nèi)存。如果它是一個(gè)雙向鏈表,那么它只是一個(gè)prev操作。原因是一樣的。
C語言中,如何刪除單鏈表中的節(jié)點(diǎn)?
單向鏈表:單向鏈表包含兩個(gè)字段,一個(gè)是信息字段,另一個(gè)是指針字段。也就是說,單向鏈表的節(jié)點(diǎn)分為兩部分,一部分是保存或顯示該節(jié)點(diǎn)的信息,第二部分存儲(chǔ)下一個(gè)節(jié)點(diǎn)的地址,最后一個(gè)節(jié)點(diǎn)指向空值。優(yōu)點(diǎn):在單向鏈表中添加和刪除節(jié)點(diǎn)比較簡單。遍歷時(shí)沒有死循環(huán)。(雙向不會(huì)循環(huán),循環(huán)列表忘記控制,很容易進(jìn)入循環(huán));缺點(diǎn):只能自始至終遍歷。我們只能找到接班人,不能找到先行者,也就是說,我們只能前進(jìn)。雙向鏈表:每個(gè)節(jié)點(diǎn)有2個(gè)鏈接,一個(gè)是前一個(gè)節(jié)點(diǎn)(當(dāng)這個(gè)鏈接是第一個(gè)鏈接時(shí),指向空值或空列表),另一個(gè)是后一個(gè)節(jié)點(diǎn)(當(dāng)這個(gè)鏈接是最后一個(gè)鏈接時(shí),指向空值或空列表)。也就是說,雙向鏈表有兩個(gè)指針,一個(gè)是指向上一個(gè)節(jié)點(diǎn)的指針,另一個(gè)是指向下一個(gè)節(jié)點(diǎn)的指針。優(yōu)點(diǎn):可以找到前驅(qū)和后繼,可以進(jìn)退;缺點(diǎn):添加刪除節(jié)點(diǎn)復(fù)雜。