当前位置: 首页 > news >正文

设计一个算法:删除非空单链表L中结点值为x的第一个结点的前驱结点

目录

单链表的存储结构定义如下

快慢指针法

三指针法版本①

三指针法版本② 


单链表的存储结构定义如下

typedef struct{Elemtype data;struct Node* next;
}LNode,*LinkList;

快慢指针法

void deleteprex(LinkList L, Elemtype e) {if (L == NULL || L->next == NULL || L->next->next == NULL) {return;  // 链表为空、只有一个节点或两个节点,无法删除前驱节点}LinkList q = L;        // 慢指针,指向当前节点的前驱LinkList p = L->next;  // 快指针,用于查找值为e的节点// 检查第一个数据节点是否是目标节点(此时没有前驱节点)if (p->data == e) {return;  // 无法删除前驱节点,直接返回}// 从第二个数据节点开始遍历p = p->next;  // p指向第二个数据节点while (p != NULL) {if (p->data == e) {// 找到值为e的节点,删除其前驱节点(即q的下一个节点)LinkList temp = q->next;q->next = p;free(temp);return;  // 只删除第一个出现的节点的前驱,处理完后立即返回}// 未找到,指针后移q = q->next;p = p->next;}
}

三指针法版本①

int DelNodeX_L(LinkList &L, ElemType x) {// 初始化指针:prepre 指向头结点,pre 指向第二个结点,p 待初始化LinkList prepre = L, pre = prepre->next, p;  // 若第二个结点值就是 x,无有效前驱可删,返回失败if (pre->data == x)  return 0;  // p 指向第三个结点,开始遍历找值为 x 的结点p = pre->next;  while (p != NULL && p->data != x) {  // 指针后移:prepre → pre → pprepre = pre;  pre = p;  p = p->next;  }  // 找到值为 x 的结点(p 非空),删除其前驱(pre)if (p != NULL) {  // prepre 跳过 pre,直接指向 pprepre->next = p;  // 释放前驱结点内存free(pre);  // 返回删除成功return 1;  } else {  // 未找到值为 x 的结点,返回失败return 0;  }  
}

三指针法版本②

void deleteprex(LinkList L, Elemtype e) {if (L == NULL || L->next == NULL || L->next->next == NULL) {return;  // 链表为空、只有一个节点或两个节点,不可能存在前驱节点}LinkList pre = L;        // 前驱节点的前驱(用于删除操作)LinkList cur = L->next;  // 当前节点,用于查找值为e的节点// 检查第一个数据节点是否是目标节点(此时没有前驱节点)if (cur->data == e) {return;  // 无法删除前驱节点,直接返回}// 从第二个数据节点开始遍历LinkList next = cur->next;while (next != NULL) {if (next->data == e) {// 找到值为e的节点,删除其前驱节点(即cur)pre->next = next;free(cur);return;  // 只删除第一个出现的节点的前驱,处理完后立即返回}// 未找到,指针后移pre = cur;cur = next;next = next->next;}
}

相关文章:

  • 【LLM】fast-api 流式生成测试
  • 计算机是如何⼯作的
  • Day15
  • 长期施肥下红壤温湿度及电导率数据集
  • 【HarmonyOS 5】运动健康开发实践介绍以及详细案例
  • 篇章十 数据结构——Java对象的比较
  • 【Linux庖丁解牛】—系统文件I/O !
  • springCloud2025+springBoot3.5.0+Nacos集成redis从nacos拉配置起服务
  • 基于Java Swing的办公自动化系统设计与实现:附完整源码与论文
  • 创建一个纯直线组成的字体库
  • DenseNet算法 实现乳腺癌识别
  • 算法练习-回溯
  • 【题解-洛谷】P10448 组合型枚举
  • 学而思网校发布AI编程新品,四重升级培育未来创新人才
  • Vue 中 v-show 与 v-if 的深度对比与性能分析
  • 第二十六章 流程控制: case分支
  • 乐观锁与悲观锁的实现和应用
  • Java 泛型技术详解
  • 【判断既约分数】2022-4-3
  • JDK21深度解密 Day 13:性能调优实战案例:高并发系统与内存密集型应用的优化秘籍
  • 恶意点击别人的网站/网站运营优化培训
  • wordpress商城 中文站/发稿
  • 上海城隍庙在哪个区/系统优化软件哪个好
  • 班组安全建设 网站/优化最狠的手机优化软件
  • 宠物网站建设规划书/企业网站的类型
  • 泰州高端网站建设/怎么制作小程序