链表与指向指针的指针应用

来源:互联网 发布:数据库系统原理教程 编辑:程序博客网 时间:2024/05/18 01:00
示例代码如下,假设单链表如下:
typedef struct Node{    ElemType data;    Node *next;}Node;typedef struct Node *LNodelist;

现需要初始化链表头结点,设函数为:

void create(Node *list){    list = (Node *)malloc(sizeof(Node));    if (NULL == list)   {        ……;    }    return;}
以上函数为经典常犯错误,今天还犯了以上错误。通过对以上函数当在下面main函数中调用时,简单情况下不会发生编译错误,但是运行结果却会发现调用create(first)函数后,并未对头结点进行了初始化分配了空间,仍然为NULL。
int main(void){    Node *first = NULL;       create(first);    return 0;}


针对以上问题,可以做如下解决,引入指向指针的指针:

void create(Node **list){    Node *p = NULL;    p = (Node *)malloc(sizeof(Node));    if (NULL ==p)   {        ……;    }    *list = p;}

主函数中调用相应改为:

int main(void){    Node *first = NULL;       create(&first);    return 0;}
或者还可以改为:

Node *create(){    Node *p = Null;    p = (Node *)malloc(sizeof(Node));        if(p == NULL)    {……}        return p;}
main函数调用为:

int main(void){    Node *first = NULL;       first = create();    return 0;}


原创粉丝点击