今天是国庆节的第四天,早上起来写了一个关于循环链表的程序。单循环链表的结构如下:
下面是我写的具体的程序:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *pNext;
}NODE,*PNODE;
PNODE creat_List(PNODE);
void traverse_List(PNODE);
PNODE Clear_List(PNODE);
int main()
{
PNODE Last = NULL;
Last = creat_List(Last);
traverse_List(Last);
Last = Clear_List( Last);
free(Last);
Last = NULL;
traverse_List(Last);
return 0;
}
PNODE creat_List(PNODE Last)
{
int len = 0;
int val = 0;
int i;
Last = (PNODE)malloc(sizeof(NODE));
if(NULL == Last)
{
printf("内存分配失败\n");
exit(0);
}
Last->pNext = Last;
printf("请输入创建元素的个数\n");
scanf("%d",&len);
for(i = 0;i < len;i++)
{
PNODE pNew = (PNODE)malloc(sizeof(NODE));
printf("请输入第%d元素的值",i+1);
scanf("%d",&val);
pNew->data = val;
pNew->pNext = Last->pNext;
Last->pNext = pNew;
Last =pNew;
}
return Last;
}
void traverse_List(PNODE Last)
{
PNODE p = Last->pNext->pNext;
while(p != Last->pNext)
{
printf("%d",p->data);
p = p->pNext;
}
printf("\n");
}
PNODE Clear_List(PNODE Last)
{
PNODE q = Last->pNext->pNext;
while(q != Last->pNext)
{
PNODE p = q->pNext;
free(q);
q = NULL;
q = p;
}
q->pNext = q;
Last = q;
return Last;
}
程序在运行的时候却崩溃了。结果如下:
程序可以正常的遍历输出,但却不能clear链表,是什么原因?请高手指点啊。