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

【数据结构与算法】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.dtcms.com/a/273555.html

相关文章:

  • Pandas:数据分箱
  • 使用Python和AkShare轻松获取新闻联播文字稿:从数据获取到文本挖掘
  • 剑指offer——链表:从尾到头打印链表
  • 自用docker记录
  • 学习C++、QT---21(QT中QFile库的QFile读取文件、写入文件的讲解)
  • 部署 React + Vite + TypeScript 项目到阿里云 ECS
  • ARMv9架构
  • tcp/quic 的滑动窗口
  • 飞算 JavaAI 体验:重塑 Java 开发的智能新范式
  • Element Plus和Ant Design Vue深度对比分析与选型指南
  • WD0407 40V 7A 超级肖特基二极管,应用于开关汽车工业控制
  • 【字节跳动】数据挖掘面试题0015:100 亿个单词,找出出现频率最高的单词。要求几种方案
  • 20250711荣品RD-RK3588开发板在Android13下的开机自启动的配置步骤
  • React之旅-05 List Key
  • 进制转换原理与实现详解
  • cyvcf2 知识点详解
  • MYSQL C_API使用全解
  • 基于gitlab 构建CICD发布到K8S 平台
  • Java大厂面试实录:谢飞机的电商场景技术问答(Spring Cloud、MyBatis、Redis、Kafka、AI等)
  • 飞算Java AI:专为 Java 开发者打造的智能开发引擎
  • 后台管理系统-权限管理
  • 云、实时、时序数据库混合应用:医疗数据管理的革新与展望(下)
  • 从Markdown到PPT:用Python打造专业演示文稿转换器
  • 2025前端面试真题以及答案-不断整理中,问题来源于牛客真题
  • 面具贴纸美颜SDK如何集成进直播APP?技术细节与性能优化实战
  • 百度2026届校招开启,大规模发力AI的百度未来何在?
  • PPT处理控件Aspose.Slides教程:使用 C# 将 PPTX 转换为 EMF
  • 【Linux仓库】命令行参数与环境变量【进程·伍】
  • 语音对话秒译 + 视频悬浮字 + 相机即拍即译:ViiTor 如何破局跨语言场景?
  • Django快速入门搭建网站