1. 程式人生 > >連結串列帶頭結點和不帶頭結點帶區別

連結串列帶頭結點和不帶頭結點帶區別

連結串列作為一種基本資料結構,常用的連結串列分為帶結點和不帶頭結點。從線性表的定義可以知道,線性表允許在任意位置進行插入和刪除。所有的連結串列都有一個頭指標head,帶頭結點的連結串列中head的資料項為空,而不帶頭的連結串列直接在頭結點存入資料,那麼當從頭插入資料時,head需要時刻變化。
接下來具體分析:
1.帶頭結點的連結串列的插入,使用一個臨時變數p等於插入之前的結點(不管具體插入位置),之後不論要插入的結點x是插到連結串列頭還是插入到連結串列其他位置都是如下語句:

x->next=p->next;
p->next=x;

2.不帶頭結點的連結串列的插入,若要插入到連結串列的開頭:

x->next=head->next;
head=x;  //這裡不再是head->next=x;

若插到連結串列的其他位置:

p=插入之前的結點
x->next=p->next;
p->next=x;

3.帶頭結點的刪除:
p是刪除結點之前結點
x是要刪除結點
p->next=x->next;
free(x);
同樣不存在刪除位置的差異。

4.不帶頭結點的刪除:
刪除第一個結點:head=head->next;這時需要改變連結串列的頭結點。
刪除其他結點時,head的值不會變。

綜上所述,帶頭結點的單鏈表,不論刪除和插入的位置如何,不需要修改head的值,不帶頭結點的單鏈表當頭插和頭刪需要修改head的值。所以一般單鏈表一般帶有頭結點。