今天写单链表的时候犯了一个过去曾犯过的错误,才发现做笔记的重要性,于是记录一下。
错误代码如下:
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node* next;
}node;
void create(node* l,int n){
l=(node*)malloc(sizeof(node));
l->next=NULL;
l->data=1;
for(int i=n;i>0;--i){
node* p=(node*)malloc(sizeof(node));
scanf("%d",&p->data);
p->next=l->next;
l->next=p;
l->data++;
}
}
int main(){
node* l;
create(l,3);
printf("%d",l->data);
return 0;
}
结果如图
在printf("%d",l->data);这一步失败
百思不得其解的情况下,请教了同学,才发现原因
修改后的代码如下
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node* next;
}node;
void create(node* l,int n){
l->next=NULL;
l->data=1;
for(int i=n;i>0;--i){
node* p=(node*)malloc(sizeof(node));
scanf("%d",&p->data);
p->next=l->next;
l->next=p;
l->data++;
}
}
int main(){
node* l=(node*)malloc(sizeof(node));//在主函数里定义这个head
create(l,3);
printf("%d",l->data);
return 0;
}
总结如下