当前位置: 首页 > 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;}
}

http://www.lqws.cn/news/204031.html

相关文章:

  • 第23讲、Odoo18 邮件系统整体架构
  • 项目-- Json-Rpc框架
  • Qt学习及使用_第1部分_认识Qt---学习目的及技术准备
  • 如何判断当前web页面是在钉钉内部打开的?
  • 使用柏林噪声生成随机地图
  • C++调试(肆):WinDBG分析Dump文件汇总
  • 新能源汽车热管理核心技术解析:冬季续航提升40%的行业方案
  • LangChain面试内容整理-知识点1:LangChain架构与核心理念
  • 征文投稿:如何写一份实用的技术文档?——以软件配置为例
  • python打卡day47
  • 【MATLAB代码】基于MCC(最大相关熵)的EKF,一维滤波,用于解决观测噪声的异常|附完整代码,订阅专栏后可直接查看
  • FreeRTOS任务之深入篇
  • 打印高质量日志的10条军规
  • 【Java学习笔记】Math方法
  • 2023年12月6级第三套第二篇
  • Flask与Celery 项目应用(shared_task使用)
  • CppCon 2015 学习:Intro to the C++ Object Model
  • 使用WPF的Microsoft.Xaml.Behaviors.Wpf中通用 UI 元素事件
  • 【计算机组成原理】计算机硬件的基本组成、详细结构、工作原理
  • 前端杂货铺——TodoList
  • MySql数据库入门到精通——关系数据库标准语言SQL
  • 零基础玩转物联网-串口转以太网模块如何快速实现与TCP服务器通信
  • python版若依框架开发:后端开发规范
  • Android 平台RTSP/RTMP播放器SDK接入说明
  • conda环境配置(一) —— 常用虚拟环境操作命令
  • OneNet + openssl + MTLL
  • QT使用AES加解密,openssl及QCA问题记录
  • 量子计算突破:新型超导芯片重构计算范式
  • 华为OD机试_2025 B卷_人民币转换(Python,100分)(附详细解题思路)
  • 基于深度学习的金枪鱼各类别目标检测含完整数据集