删除链表结点 free 该结点报错
#include<stdio.h>#include<stdlib.h>
#define OK 1
#define ERROR -1
typedef int Status;
typedef int Elemtype;
typedef struct Node
{
Elemtype data;
struct Node *next;
} Node, *LinkList; //LinkList 是指向Node结构体类型指针
Create_Circle_List(LinkList L,int m)//尾插法建立循环链表
{
LinkList p,q;
int i;
p = L;
for(i = 0;i<m;i++)
{
q = (LinkList)malloc(sizeof(LinkList));
q ->data = i + 1;
p ->next = q;
p =q;
}
p->next = L->next;//尾结点指向首结点(首结点不是头结点)
return OK;
}
printf_LinkList (LinkList L)
{
LinkList head,tail;
head=L->next;
tail=L->next;
do
{
printf("%d ",tail->data);
tail=tail->next;
}
while(head!=tail);
printf("\n");
}
GetElem(LinkList L, int k,Elemtype *e)
{
int i=1;
LinkList q;
q=L->next;
while(i<k)
{
q=q->next;
i++;
}
*e= q->data;
return 1;
}
Delete_LinkList(LinkList L, int i,Elemtype *e)
{
LinkList p,q;
int j=0;
p=L;
while(j<i-1 )
{
p=p->next;
++j;
}
q=p->next;
p->next=q->next;
*e= q->data;
free(q);
printf("\n");
return 1;
}
LEN_LinkList(LinkList L)
{
LinkList head,tail;
int length=1;
head=L->next;
tail=L->next->next;
while(tail != head)
{
tail = tail->next;
length++;
}
printf("\n");
return length;
}
Insert_LinkList(LinkList L,int i,Elemtype e)
{
LinkList p,s;
int j;
p=L;
j=1;
while(j<i)
{
p=p->next;
++j;
}
s=(LinkList)malloc(sizeof(Node));
s->data=e;
s->next=p->next;
p->next=s;
}
Status main()
{
LinkList L;
int m,n,k;
Elemtype *e;
e=&m;
L = (LinkList)malloc(sizeof(Node)); //建立头结点
L ->next = NULL;
printf("请输入创建循环链表长度:");
scanf("%d",&m);
Create_Circle_List(L,m); //创建循环链表
printf("创建的循环链表为:\n");
printf_LinkList (L);
printf("请输入要获取链表元素的位置:");
scanf("%d",&n);
GetElem(L, n,e);
printf("该位置的元素为:%d\n",*e);
printf("请输入要删除结点的位置:");
scanf("%d",&k);
Delete_LinkList(L, k,e);
printf("删除的值%d\n",*e);
printf("新的链表:\n");
printf_LinkList (L);
printf("新链表的长度为:%d\n",LEN_LinkList(L));
printf("请输入要插入结点的位置:\n");
scanf("%d",&k);
printf("请输入要插入的值:");
scanf("%d",&m);
Insert_LinkList(L,k,m);
printf("新的链表:\n");
printf_LinkList (L);
printf("新链表的长度为:%d\n",LEN_LinkList(L));
return 0;
}
这是为什么
最后一个节点指向的是第L->NEXT 这个元素,然后它被free后。
最后一个节点还是指向那个地址的,然后恭喜你“报错”。。。
页:
[1]