我需要c

问题描述 投票:0回答:1
#include <stdio.h>
#include <stdlib.h>

typedef int Datatype;
typedef struct singlyLinkedList
{
  Datatype data;
  struct singlyLinkedList *next; 
}node;
typedef node *linkList;

void InitNode(node *n){
    n=(node*)malloc(sizeof(node));
    n->data=9999;
    n->next=NULL;
}

linkList CreateListOnL(void){
    int value;
    linkList head=NULL;
    puts("if input 9999 then end");
    puts("input, please:");
    scanf("%d",&value);
    while (value!=9999)
    {
        node *p=NULL;
        InitNode(p);
        if(!p){
            puts("fail");
            exit(EXIT_FAILURE);
        }
        p->data=value;
        p->next=head;
        head=p;

        puts("input the value, please:");
        scanf("%d",&value);
    }

    return head;
}

int main(void){
    linkList L;
    L=CreateListOnL();

    linkList head;
    node *p;

    head=L;
    p=head;

    int i=1;
    while (p->next!=NULL)
    {
        printf("linked-list %dst:%d\n",i,p->data);
        i++;
    }

    printf("linked list %dst:%d\n",i,p->data);
}

我研究了linked-link,所以我用C白化了代码。 但我是一个C语言初学者,我尝试运行该程序,但失败了,我找不到错误。 该程序可以编译并且没有错误。 编译为 MinGw-w64 GCC 11.4.0 64 位。 帮忙😥😥😥😥😥😥😥

c linked-list malloc
1个回答
0
投票

主要问题出在InitNode函数上。

应该是:

void InitNode(node **n){
*n=(node*)malloc(sizeof(node));
(*n)->data=9999;
(*n)->next=NULL;
}

通过这种方式,您可以使用指针的地址。在您的版本中,您将 NULL 指针传递给该函数。 (像这样调用函数:InitNode(&p);)

另一个问题是链表的打印。 在 while 循环中,您不会更新指针,并且会出现无限循环。 您必须添加:

p = p->next;
© www.soinside.com 2019 - 2024. All rights reserved.