链表的创建和输出函数都没问题,就是执行完删除函数后不能正常输出了,我debug了一下,发现是如果删除第二个数,那第三个数的data就会变成0x...之类的,我觉得是删除时第一个数和第二个数没连接好,但又看不出问题
void Creat(Node *h)
{
int i,n;
Node *p , *node;
h->next = NULL;
p = h;
srand(time(0));
printf("请输入结点数量:");
scanf("%d",&n);
for (i = 0; i < n; i++)
{
node = (Node*)malloc(sizeof(Node));
node->data = rand() % n;
p->next = node;
p = node;
}
p->next = NULL;
}
void Delete(Node *h) //n为被删除数据所在的位置
{
int i,n;
Node *p=h;
Node *q;
printf("请输入要删除第几个数据:");
scanf("%d",&n);
for (i = 1; i < n; i++)
{
p = p->next;
}
q = p;
p->next = (q->next)->next;
free(q->next);
}
void Print(Node *h)
{
Node *p;
p = h;
printf("数据如下:");
while (p->next != NULL)
{
p = p->next;
printf("%d ",p->data);
}
printf("\n");
}
问题出在,free(q->next),这一句,因为,p->next = (q->next)->next;这一句执行后,实际上q->next也发生了改变,所以之后执行free(q->next),实际上也是将连接后的内容删除了
能把完整的代码发一下么?