[英]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.