单链表的查找插入以及删除操作

单链表查找

算法思路:

  1. 声明一个节点 p 指向链表的第一个节点,初始化 j 作为计数器,从 1 开始 2. 当 j<i 的时候,遍历链表,让 p 不断向后移动,计数器 j+1
  2. 查找成功时,返回节点
  3. 当到了链表的末尾即 p 为空时,则说明第 i 个元素不存在(摘自灰灰考研)
int getelem (LinkList &L,int i,Elemtypy &e){
    int j=1; LinkList p;
    p=L->next;
    while(p&&j<i){
      p=p->next;
      ++i;
}
   if(!p||j>i) return error;
   e=p->data;
   return ok;
}

单链表插入

单链表插入图
算法思路:

  1. 声明一个节点 p 指向链表的第一个节点,初始化 j 作为计数器从 1 开始。 2. 当 j<i 时,遍历链表,使 p 指针向后移动,不断指向下一个节点,此时 j+1。 3. 如果遍历到链表尾部,则说明第 i 个元素不存在。
  2. 否则查找成功,创建一个空节点 s。
  3. 将数据 e 赋值给 s->data。
  4. 单链表插入:s->next = p->next; p->next = s;。
  5. 返回成功,算法结束。(摘自灰灰考研)
int LinkInsert(LinkList &L,int i,Elemtype &e)
{ 
       int j=1; 
       LinkList p,s;
       p=L;
       while(p&&j<i){
           p=p->next;
           ++j;
}
       if(!p||j>i) return error;
       s=(LinkList)malloc(sizeof(LNode));
       s->next=p->next;
       p->next=s;
       return ok;
}

单链表删除

算法思想:

  1. 首先找到Ai-1的存储位置p,保存要删除的Ai的值
  2. 令p->next指向i-1
  3. 释放Ai的空间
status ListDelete(LinkList &L,int i,Elemtype &e)
{
      LinkList p=L,q;
      int j=0;
      while(p->next &&j<i-1) {p=p->next;  ++j;}
      if (!(p->next)||j>i-1) return error;
      q=p->next;
      p->next=q->next;
      e=q->data;
      free(q);
      return ok;
      
}
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值