单链表的删除

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

  1. 声明一指针p指向链表头指针,初始化j从1开始;
  2. 当j
  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;
}

你可能感兴趣的:(单链表的删除)