单链表的删除
Status ListDelete(LinkList *L,int i,ElemType *e)
{
int j;
LinkList p,q;
p = *L; // 声明一结点p指向链表第一个结点
j = 1;
while (p->next && j < i)/* 遍历寻找第i个元素 */
{
p = p->next;
++j;
}
if (!(p->next) || j > i)
return ERROR; /* 第i个元素不存在 */
q = p->next;
p->next = q->next; /* 将q的后继赋值给p的后继 */
*e = q->data; /* 将q结点中的数据给e */
free(q); /* 让系统回收此结点,释放内存 */
return OK;
}
这个遍历的结果P不是应该保存第i个结构的地址吗,为什么下面p-next=q->next里面的P好像是第i-1的地址 到底怎么回事??
while (p->next && j < i)/* 遍历寻找第i个元素 */
{
p = p->next;
++j;
} 感觉是j<i的问题,试试j<i+1 这是教程代码,出问题的几率很小 暂时没看出来什么问题,但是可以给你一个调试的建议:
给你的结构体加上一个int元素,用于编号这是第几个结构体,等while循环运行完了输出一下指针p指向结构的编号,并且确保你结构体的编码不是从0开始。 删除后要把后面的节点与前面的节点连接起来
页:
[1]