[英]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);
}
这是一个非常简单的双向链表,但我什至无法开始插入,因为我什至无法将值放入第一个节点。 当我在create
中create
新节点时, 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.