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

【数据结构与算法】203.移除链表元素(LeetCode)图文详解

移除链表元素

题目传送门

在这里插入图片描述

思路一:遍历链表

定义一个指针prev遍历整个数组 如果他下一个节点的val值为val,就移除这个节点,让prev的next指针指向被删除的下一个节点,然后prev后移,直到prev的next指针为空

在这里插入图片描述

按照这个思路,有以下代码

struct ListNode* prev;
while(prev!=NULL)
{if(prev->next->val=val){struct ListNode* del=prev->next;prev->next=del->next;free(del);//释放内存时,必须用原指针 }else{prev=prev->next;}
}

我们再来看特殊的情况

链表为空时

直接返回空指针

if(head==NULL)
{return NULL;
}

头节点的val值为被删除的元素时

while(head!=NULL&&head->val==val)
{struct ListNode*del=head;head=head->next;free(del);}

完整代码如下

struct ListNode* removeElements(struct ListNode* head, int val) {while(head!=NULL&&head->val==val) {struct ListNode*del=head;head=head->next;free(del);}if(head==NULL){return NULL;}struct ListNode*prev = head;while(prev->next!=NULL){if(prev->next->val==val){struct ListNode* del=prev->next;prev->next=prev->next->next;free(del);}else{prev=prev->next;}}return head;    
}

思路二:创建新的链表

本质:定义一个指针pcur 让他去遍历原链表 如果pcur->val不为val,就把他尾插到新的链表中

struct ListNode* removeElements(struct ListNode* head, int val){//创建新的头节点 尾节点struct ListNode* NewHead,*NewTail;NewHead=NULL;NewTail=NULL;struct ListNode*pcur=head;//遍历原链表while(pcur){//找值不为val的节点,尾插到新链表中if(pcur->val!=val){//链表为空(第一次插入)if(NewHead==NULL){NewHead = NewTail = pcur;}//链表不为空else{NewTail->next=pcur;//pcur插入到NewTail后 成为新的尾节点NewTail=NewTail->next;}}pcur=pcur->next;if(NewTail!=NULL)NewTail->next=NULL;//一定要置为空,不然像示例一中最后的6 也会输出 因为5对应的next指针指向的是6这个节点}        return NewHead;
}
http://www.xdnf.cn/news/15257.html

相关文章:

  • 05 唤醒词检测:让语音助手随时待命
  • 平板柔光屏与镜面屏的区别有哪些?技术原理与适用场景全解析
  • Kotlin 常用语法糖完整整理
  • 如何准确查看服务器网络的利用率?
  • 云防火墙有什么用?
  • SoC程序如何使用单例模式运行
  • 企业网络安全的“金字塔”策略:构建全方位防护体系的核心思路
  • OSCP官方靶场-Solstice WP
  • AI驱动的业务系统智能化转型:从静态配置到动态认知的范式革命
  • 【办公类-107-01】20250710视频慢速与视频截图
  • mysql join语句、全表扫描 执行优化与访问冷数据对内存命中率的影响
  • MySQL索引:数据库的超级目录
  • 第35周—————糖尿病预测模型优化探索
  • Android 插件化实现原理详解
  • Apache Dubbo实战:JavaSDK使用
  • 动态物体滤除算法
  • MyBatis-Plus 中使用 Wrapper 自定义 SQL
  • Linux C 文件基本操作
  • 【oscp】超长攻击链vulhub靶机,TommyBoy1dot0
  • 登录为图片验证时,selenium通过token直接进入页面操作
  • ResolvableType 解密Java泛型反射
  • 【会员专享数据】2013-2024年我国省市县三级逐月SO₂数值数据(Shp/Excel格式)
  • 深入拆解Spring核心思想之一:IoC
  • 北京-4年功能测试2年空窗-报培训班学测开-第四十七天
  • 常见射频电路板工艺流程
  • Spring Boot项目中大文件上传的高级实践与性能优化
  • 打破技术债困境:从“保持现状”到成为变革的推动者
  • 机器学习11——支持向量机上
  • 【博主亲测可用】PS2025最新版:Adobe Photoshop 2025 v26.8.1 激活版(附安装教程)
  • C++交叉编译工具链制作以及QT交叉编译环境配置