2023-03-21-将指针所在地址传入函数来创建链表的一种写法

发布时间 2023-03-31 12:50:25作者: 正方形的被子

如下,通过将指针所在的地址传入函数中即**p的形式,来保证直接对地址进行运算,而不需要再返回一个链表

//双链表

#include <stdio.h>
#include <stdbool.h>
#include <malloc.h>

typedef struct DNode
{
    int data;
    struct DNode *prior,*next;//prior指向上一个结点,next指向下一个结点
}DNode,*DLinkList;

bool InitList(DLinkList *L)//初始化双链表
{
    *L=(DNode *)malloc(sizeof(DNode));//新建一个头结点
    if(*L==NULL)//内存不足分配失败
    {
        return false;
    }
    else
    {
        (*L)->next=NULL;//将头结点的下一个节点设为NULL
        return true;
    }
}

void createDLinkList(DLinkList *L)//尾插法建立双链表
{
    *L=(DLinkList)malloc(sizeof(DNode));
    (*L)->next=NULL;
    DNode *s;
    DNode *e=*L;//e为表尾的结点,此时L就是最后的结点
    int value;
    scanf("%d",&value);
    while(value!=9999)
    { 
        s=(DNode *)malloc(sizeof(DNode));
        s->data=value;
        e->next=s;
        s->prior=e;//s的上一个结点指向e
        e=s;//将e指向s,即最后一个结点
        scanf("%d",&value);
    }
}

int main()
{
    DLinkList L;
    InitList(&L);
    createDLinkList(&L);
    printf("%d",L->next->next->next->data);
    return 0;
}