#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 位。 帮忙😥😥😥😥😥😥😥
主要问题出在InitNode函数上。
应该是:
void InitNode(node **n){
*n=(node*)malloc(sizeof(node));
(*n)->data=9999;
(*n)->next=NULL;
}
通过这种方式,您可以使用指针的地址。在您的版本中,您将 NULL 指针传递给该函数。 (像这样调用函数:InitNode(&p);)
另一个问题是链表的打印。 在 while 循环中,您不会更新指针,并且会出现无限循环。 您必须添加:
p = p->next;