单链表的删除

单链表第i个数据删除结点的算法思路

  1. 声明一指针p指向链表头指针,初始化j从1开始;
  2. 当j<i时,就遍历链表,让p的指针向后移动,不断指向下一个结点,j累加1;
  3. 若链表末尾p为空,则说明第i个元素不存在;
  4. 否则查找成功,将欲删除的结点p->next 赋值给q;
  5. 单链表的删除标准语句p->next=q->next;
  6. 将q结点中的数据赋值给e,作为返回;
  7. 释放q结点;
  8. 返回成功。

实现代码算法如下:

/* 初始条件:顺序线性表L已存在,1<=i<=ListLength(L) */
/* 操作结果:删除L的第i个数据元素, */
Status ListDelete(LinkList *L, int i, ElemType *e) 
{
  int j;
  LinkList p,q;
  p = *L;
  j = 1;
  // 寻找遍历第i个元素并将p的next指向p,直到找到i为止
  while (p->next && j < 1) {
   p = p->next;
   ++j;
  }
  // 如果第i个元素不存在,报错
  if (!(p->next) || j > i)
  {
    return ERROR;
  }

  q = p->next;
  // 将q的后继赋值给p的后继
  p->next = q->next;
  // 因为要获取释放结点的值,所以这里要把释放结点的值赋值给*e
  *e = q->data;
  // 利用c语言的函数free 让系统回收此结点,释放内存
  free(q);
  return OK;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文来自本人著作《趣学数据结构》 链表是线性表的链式存储方式,逻辑上相邻的数据在计算机内的存储位置不一定相邻,那么...
    rainchxy阅读 3,800评论 6 20
  • 1. 链表的定义 线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以存在内存中...
    Eric_Hunter阅读 991评论 0 2
  • 转自:http://blog.csdn.net/oreo_go/article/details/52116214 ...
    YYT1992阅读 1,047评论 0 4
  • 一方面真切地感受到衰老,感受到时间流逝,有倒计时的恐惧和不甘。一方面继续麻木的重复生活,没有动弹,默默看着时间流向...
    Collagen阅读 161评论 0 0
  • 作者:王瑜 上海的天气太热,刚买回不久的大米还没来得及吃上几顿,米粒里面便生了几个小虫子,原打算把整袋大米扔掉,却...
    北笔阅读 453评论 0 2