1.创建双链表结构体
typedef struct DulNode{ ElemType data; struct DulNode *prior; struct DulNode *next; }DuLinkList;
结构图如下:
*注:prior是前向指针域,next是后向指针域,data是数据域
2.1头插法建立双向链表
void CreateListF_Dul(DuLinkList *&L,ElemType a[],int n){/*头插法建立双链表*/ DuLinkList *s; int i; L = (DuLinkList *)malloc(sizeof(DuLinkList)); L -> prior = L -> next = NULL;/*创建头节点*/ for(i = 0;i < n;i++){ s = (DuLinkList *)malloc(sizeof(DuLinkList));/*生成新节点*s*/ s -> data = a[i];/*使新节点数据域的值为a[i]*/ s -> next = L -> next; /*将新节点插入到头节点之后*/ if(L -> next != NULL){/*若L存在数据节点,修改L->next的前驱指针*/ L -> next -> prior = s; } L -> next = s; s -> prior = L; } }
(1)创建L节点和S节点
(2)将新节点S插入到头节点L之后
L的后向指针域指向S
S的前向指针域指向L
上面两步得到双链表
(3)当L后向指针域不为NULL,即存在数据节点时
左图为双链表,右图S节点为新创建的节点
让S的后向指针域指向L的后向指针域所指向的位置
让L的后向指针域指向的数据节点的前向指针域指向S节点
让L的后向指针域指向S节点
让S节点的前向指针域指向L节点