和單向鍊錶相比,多了乙個前驅結點。如果他為空,那麼next和prior都指向自己。而對於雙迴圈鍊錶,只需要最後乙個元素的next指向head->next,head->next的prior指向最後乙個節點即可。
新節點s插入鍊錶,s->next給p結點,s->prior給p->prior,然後,p->prior->next指向s,p->prior再指向s。順序需要注意
s->next = p;
s->prior = p->prior;
p->prior->next = s;
p->prior = s;
刪除結點p。p->next->prior 指向 p->prior,p->prior->next 指向 p->next 。最後將p結點delete。
p->prior->next = p->next;
p->next->prior = p->prior;
delete p;
(附截圖)
注意:因為函式沒有返回node*
型別,所以這裡對指標進行引用,否則在退出函式的時候,並沒有儲存改變。如果需要刪除全部鍊錶,需要儲存initlist之後的head位址,否則會遺漏乙個node結點沒有刪除。
**實現:
#include#include#includeusing namespace std;
const int ok = 1;
const int error = 0;
const int letternum = 26;
typedef char elemtype;
struct node;
int initlist(node *&l)
p->next = l->next; //尾結點指向head->next(第乙個有字母的位址)
l->next->prior = p;
return ok;
}void change(node *&l,int i)
} else if (i<0)
} else
}int main()
cout
也可以致信進行交流 : [email protected]
雙向鍊錶和迴圈鍊錶
雙向鍊錶和單鏈表的區別就在於多了乙個前驅 有需要檢視單鏈表的在主頁裡面查詢 雙向鍊錶 如下 typedef class node node class doublelist doublelist node buynode int val,node next,node pre void insert ...
迴圈鍊錶,雙向鍊錶
迴圈鍊錶 迴圈鍊錶與順序鍊錶之間的區別 迴圈鍊錶最後乙個資料的next指標域不為空,而是指向頭結點,其他基本操作大體相同,只是在判斷表結束的條件變為判斷節點的引用域是否為頭引用 雙向鍊錶 author neosong date oct 10,2017 4 43 01 pm program of in...
鍊錶 雙向迴圈鍊錶
雙向迴圈鍊錶與單鏈表一樣,都是邏輯連續 物理不連續的儲存方式,但它的效果要遠遠優於單鏈表,其結構如下 雙向迴圈鍊錶首先要有乙個頭節點,頭節點中不存放資料,真正的資料從頭節點的下乙個節點開始存放 然後每乙個節點都有兩個指標,分別指向前乙個節點和後乙個節點 最後頭尾相連,就成了雙向迴圈鍊錶。includ...