关于单链表的程序出问题了

来源:百度知道 编辑:UC知道 时间:2024/05/30 10:04:35
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Node
{
char save[10];
Node *next;
int id;
}Node,*sqlist;
void init(sqlist &L)
{
FILE *fp1;
fp1=fopen("save.txt","r");
char id[3];
int i=0;
sqlist p;
p=L;
while(1)
{
i=0;
p=(Node *)malloc(sizeof(Node));
fscanf(fp1,"%s",p->save);
// printf("%s",p->save);
if(p->save[0]=='#') {p=NULL;break;}
fscanf(fp1,"%s",id);

p->id=0;
while(id[i]!='\0'){p->id=p->id*10+(id[i]-0x30);i++;}
// printf("%d",p->id);
p=p->next;
// printf("%s",name);
}

}
void print(sqlist L)
{
sqlist q=NULL;
q=L;
while(q)
{
printf("%s",q->save);
printf("%d",q->id);

1、if(p->save[0]=='#') {p=NULL;delete p;break;}
加delete p,否则内存泄露;

2、init函数没有返回构建好的链表。
p=L一句不足以使得后边构建的链表返回

3、整数读入没有那么麻烦。

void init(sqlist &L)
{
FILE *fp1;
fp1=fopen("save.txt","r");
int i=0;
sqlist p=(Node *)malloc(sizeof(Node)),q;
L=q=p;
while(1)
{
i=0;
fscanf(fp1,"%s",p->save);
if(p->save[0]=='#')
{
q->next=NULL;
delete p;
break;
}
else
{
q->next=p;
q=q->next;
fscanf(fp1,"%d",&p->id);
p=(Node *)malloc(sizeof(Node));
}
}

你传进去的头节点是空的,你首先应该做的是头节点为空的时候怎么处理