请大家看看我写的这个将带头节点的单链表置空的函数错在哪里?
请大家看看我写的这个将带头节点的单链表置空的函数错在哪里?
int ClearList(LinkList head)
{
if(!head){printf("空表");return 0;}
LinkList p,q;p=head;
while(p!=NULL){
q=p;
p=p->next;
free(q);}
head=p;
}
请大家看看我写的这个将单链表重置为空表的函数是哪里有问题?为什么我先开始用createList创建一个单链表,再调用这个ClearList函数,在调用ListTraverse函数就会出现
"0x0040e0d3"指令引用的"0xdddddde1"内存。该内存不能为"read"。
我用的是vc++.以下是全部代码:
#include<stdio.h>
#include<malloc.h>
typedef int ElemType;
struct List{
ElemType data;
struct List *next;
};
typedef struct List LNode;
typedef LNode *LinkList;
void CreateList(LinkList head,int n)
{
int i;
LinkList p,q;
q=head;
for(i=1;i<=n;i++){
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=q->next;
q->next=p;
q=p;}
}
int ClearList(LinkList head)
{
if(!head){printf("空表");return 0;}
LinkList p,q;p=head;
while(p!=NULL)
{
q=p;
p=p->next;
free(q);}
head=p;
}
int ListTraverse(LinkList head)
{
int i;
LinkList p;
p=head;
if(p==NULL){printf("空表\n");return 0;}
p=head->next;
for(i=1;p->next!=NULL;i++)
{
printf("%d::%d ",i,p->data);
p=p->next;
}
printf("%d::%d ",i,p->data);
}
void main()
{
LinkList head;
head=NULL;
int n;
printf("想建立的元素个数:");
scanf("%d",&n);
head=(LinkList)malloc(sizeof(LNode));
head->next=NULL;
CreateList(head,n);
ClearList(head);
ListTraverse(head);
}