739738097@qq.co 发表于 2017-5-26 01:00:02

单链表的删除



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;

    }

BngThea 发表于 2017-5-26 09:45:08

感觉是j<i的问题,试试j<i+1

739738097@qq.co 发表于 2017-5-26 13:36:00

这是教程代码,出问题的几率很小

Hacker_Jack 发表于 2017-5-30 13:14:20

暂时没看出来什么问题,但是可以给你一个调试的建议:
给你的结构体加上一个int元素,用于编号这是第几个结构体,等while循环运行完了输出一下指针p指向结构的编号,并且确保你结构体的编码不是从0开始。

鱼C丶彪哥 发表于 2017-6-1 00:53:02

删除后要把后面的节点与前面的节点连接起来
页: [1]
查看完整版本: 单链表的删除