图解双链表建立

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节点

猜你喜欢

转载自www.cnblogs.com/lsir/p/10735885.html