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