鏈表如何刪除指定節(jié)點 c語言鏈表怎么刪除多個節(jié)點???
c語言鏈表怎么刪除多個節(jié)點啊?1. 讓X節(jié)點的前節(jié)點的后向指針字段指向X節(jié)點的后向指針字段所指向的節(jié)點;讓X節(jié)點的后節(jié)點的前向指針字段指向X節(jié)點的前向指針字段所指向的節(jié)點;釋放X節(jié)點;P->lin
c語言鏈表怎么刪除多個節(jié)點?。?/h2>
1. 讓X節(jié)點的前節(jié)點的后向指針字段指向X節(jié)點的后向指針字段所指向的節(jié)點;讓X節(jié)點的后節(jié)點的前向指針字段指向X節(jié)點的前向指針字段所指向的節(jié)點;釋放X節(jié)點;P->link->rlink=P->rlink->link=P->llinkfree(x)當(dāng)然,如果雙向鏈表不是循環(huán)鏈表,則需要前導(dǎo)指針考慮x節(jié)點作為第一個節(jié)點或最后一個節(jié)點的特殊情況。2Temp=PP=P->next,Temp->next=null。這三句話有個問題。Temp=P,讓Temp指向P所指向的節(jié)點,P=P->next,P指向向后移動,Temp->next=null,讓Temp的后繼者為空。這里有個問題。鏈表與temp所指向的節(jié)點斷開連接,這相當(dāng)于刪除P之后的所有節(jié)點。如果(P->next==null),我們應(yīng)該首先確定P是否是最后一個節(jié)點。如果是,我們必須找到P的前因pre,讓pre->next=null,free(P)。如果不是最后一個節(jié)點,則將P的后續(xù)節(jié)點的值字段復(fù)制到P,然后刪除P的后續(xù)節(jié)點,相當(dāng)于刪除PP->data=P->next->datap->next=P->next->nextfree(P)
單向鏈表和雙向鏈表的區(qū)別?
單向鏈表:單向鏈表包含兩個字段,一個是信息字段,另一個是指針字段。也就是說,單向鏈表的節(jié)點分為兩部分,一部分是保存或顯示該節(jié)點的信息,第二部分存儲下一個節(jié)點的地址,最后一個節(jié)點指向空值。優(yōu)點:在單向鏈表中添加和刪除節(jié)點比較簡單。遍歷時沒有死循環(huán)。(雙向不會循環(huán),循環(huán)列表忘記控制,很容易進入循環(huán));缺點:只能自始至終遍歷。我們只能找到接班人,不能找到先行者,也就是說,我們只能前進。雙向鏈表:每個節(jié)點有2個鏈接,一個是前一個節(jié)點(當(dāng)這個鏈接是第一個鏈接時,指向空值或空列表),另一個是后一個節(jié)點(當(dāng)這個鏈接是最后一個鏈接時,指向空值或空列表)。也就是說,雙向鏈表有兩個指針,一個是指向上一個節(jié)點的指針,另一個是指向下一個節(jié)點的指針。優(yōu)點:可以找到前驅(qū)和后繼,可以進退;缺點:添加刪除節(jié)點復(fù)雜。
單鏈表雙向鏈表循環(huán)鏈表的優(yōu)點?
訪問模式:單鏈表:如果訪問任何節(jié)點,只能從頭到尾訪問。單循環(huán)鏈表:可以從任意節(jié)點開始,從末端到任意節(jié)點進行訪問雙向鏈表:可以從任意節(jié)點開始,任意前后訪問。單鏈表和單循環(huán)鏈表:只能在當(dāng)前節(jié)點后插入和刪除雙鏈表。它可以在當(dāng)前節(jié)點之前或之后插入,并刪除前向和后續(xù)(包括節(jié)點自己的)存儲。單鏈表和單循環(huán)鏈表的存儲密度高于雙鏈表