当前位置: 首页 > 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.lryc.cn/news/585017.html

相关文章:

  • doker和网站部署
  • LeetCode--43.字符串相乘
  • Kotlin 常用语法糖完整整理
  • 九联UNT403AS_S905L3SB当贝固件优盘刷机包下载
  • 9、鸿蒙Harmony Next开发:栅格布局 (GridRow/GridCol)
  • AI产品经理面试宝典第7天:核心算法面试题-上
  • 在 Spring Boot 中使用 WebMvcConfigurer
  • AI技术正以前所未有的速度重塑职业生态与行业格局,尤其在自动化测试领域,AI驱动的测试框架通过智能化、低代码化重构传统测试流程。
  • python solr数据导出脚本
  • 分割网络Segformer
  • 界面组件DevExpress WPF中文教程:Grid - 如何检查节点?
  • mongodb 开源同步工具介绍
  • Windows 应用程序的 UI 框架:WPF、WinUI 3 和 UWP的差异区别
  • Django--02模型和管理站点
  • 【三】ObservableCollection 与 List 的区别
  • 【EGSR2025】材质+扩散模型+神经网络相关论文整理随笔(四)
  • (二)OpenCV——边缘增强与检测
  • 大数据在UI前端的应用创新:基于用户反馈的产品迭代优化系统
  • PPT处理控件Aspose.Slides教程:使用 C# 将 PPTX 转换为 EMF
  • 游戏的程序员会不会偷偷改自己账号的数据?
  • TypeScript---class类型
  • 工业通信升级新选择:耐达讯CCLINKIE转Modbus TCP网关
  • 猿人学js逆向比赛第一届第十九题
  • U-Net网络学习笔记(1)
  • 2025亚太中文赛项 B题疾病的预测与大数据分析保姆级教程思路分析
  • 机器学习数据集加载全攻略:从本地到网络
  • 【读代码】开源音乐分离工具Spleeter
  • 深度学习14(循环神经网络)
  • 深度学习篇---昇腾NPUCANN 工具包
  • JVM故障处理与类加载全解析