簡體   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