该方法是将节点插入在当前循环双链表的表尾上,为此增加一个尾指针r ,并始终指向当前链表的尾节点,最后让r->next 指向头结点。头结点的prior 指向尾节点。
注意:这里头结点,尾节点 要相互指向 才是循环双链表
双链表的存储结构:
typedef strcut DLinkList{
int data;
DLinkList *next;
DLinkList *prior;
}
思路;
1.创建头结点,并定义一个尾指针r ,始终指向尾结点,开始时是指向头结点。
2.通过for,生成新节点。然后插入表尾
3.最后,尾节点和头结点相连(没有这步如何使循环双链表)
总结:尾节点指向头结点,头结点指向尾节点
C代码实现:
void CreateCDListF(DLinkList *& L,int a[],int n){
DLinkList * s,*r;
int i;
L = (DLinkList *)malloc(sizeof(DLinkList));
r = L; //注意,这里是区别之处
for(int i = 0; i < n; i++){
s = (DLinkList *)malloc(sizeof(DLinkList));
s->data = a[i];
r->next = s;
s->prior = r; //因为是双指针域,所有有两处修改
r = s;
}
r->next = L; //尾节点指向头结点
L->next = r; //头结点指向尾节点
}