繁体   English   中英

在C中创建链接列表

[英]create Linked List in C

您好,我对此感到非常困惑,希望您能为我提供帮助。 这是我的代码:

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

struct node{
    int x;
    struct node *next;
    struct node *prev;
};

typedef struct node NODE;

NODE * create(int data)
{
    NODE *newn;
    newn=(NODE*)malloc(sizeof(NODE));
    newn->x=data;
    newn->next=NULL;
    newn->prev=NULL;
    return newn;
}

int insert(NODE *list, int data)
{
    NODE *temp,*news;
    temp=list;
    if(list==NULL)
    {
        list=create(data);
        return 0;
    }
}

int main()
{
    int put;
    NODE *mList=NULL;
    clrscr();
    printf("data: ");
    scanf("%i",&put);         
    insert(mList,put);                
}

这是一个非常简单的双向链表,但我什至无法开始插入,因为我什至无法将值放入第一个节点。 当我在createcreate新节点时, newn->x将具有正确的值, list->x (在insert )也将具有正确的值,但是当它返回main时, mList->x仍为0

您正在按值传递mList指针,因此在函数返回时它将重置。

切换到

insert(NODE** list, int data) 

并通过

insert(&mList, put); 

然后我认为它将起作用。 每当您希望函数更改某些内容时,都需要通过指针传递参数,或者如果您使用C ++则可以通过引用传递参数。

实际上,令我惊讶的是在插入调用之后,mList不是零。

当您传递mList进行插入时,将指针的副本(mList,它为NULL)传递给插入。 这意味着您对插入函数中的指针“列表”所做的任何操作都不会反映在变量mList(位于函数外部)中。

您将需要传递mList的地址,以便可以更改其指向的内容。

因此,将insert方法更改为:

insert(NODE** list, int data)

将分配更改为列表:

*list = create(data);

并将调用更改为:

insert(&mList, put);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM