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

力扣刷题 - 203.移除链表元素

题目:

 

方法:创建一个新链表,遍历原链表找不为val的值,存放到新链表。

思路:在这里我们已经有了一个链表,我们要在链表中去实现删除指定值的节点,返回新的头节点。你会发现这道题其实和前面移除元素类似,那我们能不能用双指针去解决这道题呢?答案肯定是不行的,为什么呢?

前面移除元素的双指针是改变了值,但是空间大小并没有发生变化。但是在链表中我得把它所在的节点给删除,虽然道理类似,但是在链表这里行不通。

因此,我们创建一个新链表,新链表的话就得有新的头节点和尾节点!这是就有人问为什么要有尾节点,那肯定是因为我们链表是有始有终的,如果没有尾节点我们就不知道链表末尾的情况。

创建好之后,我们就开始遍历链表,找不为val的节点,存放到新链表。

这里注意:我们创建的链表最开始肯定是空链表,但当我们插入一个节点后,就不再是空链表了!所以我们需要分为两种情况去讨论:空链表/非空链表

 

当我们去执行时,系统告诉我们第一个样例不通过,这是为什么呢?

我们调试发现:

最后一个节点的next并不是NULL,所以需要特殊处理

即当newTail !=NULL时,newTail -> next = NULL;这里我们要注意newTail !=NULL,因为如果原链表为空链表时,newTail为空指针,空指针是无法解引用的!!!

代码:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/typedef struct ListNode ListNode;
struct ListNode* removeElements(struct ListNode* head, int val) {//第一步:创建一个新链表,需要头结点和尾结点ListNode* newHead=NULL;ListNode* newTail=NULL;ListNode* pcur=head;while(pcur){//第二步:遍历原链表找到不是val的值if(pcur->val!=val){//第三步:讨论链表为空和非空的情况//链表为空的情况if(newHead==NULL){newHead=newTail=pcur;}//链表非空的情况else{newTail->next=pcur;newTail=newTail->next;}}pcur=pcur->next;}if(newTail!=NULL)//如果newTail为空,空指针不能解引用,所以需要判断newTail->next=NULL;return newHead;
}

相关文章:

  • leetcode(01)森林中的兔子
  • 六、小白如何用Pygame制作一款跑酷类游戏(静态障碍物和金币的添加)
  • 深入浅出:LDAP 协议全面解析
  • LangChain 单智能体模式示例【纯代码】
  • IPv6 公网设置技巧
  • 初识javascript
  • Sharding-JDBC 系列专题 - 第一篇:简介与快速入门
  • Cribl 对Windows-xml log 进行 -Removing filed-06
  • DSP28335入门学习——第一节:工程项目创建
  • SpringBoot 3 与 SpringDoc 打造完美接口文档
  • Centos9 离线安装 MYSQL8
  • Spring Boot集成MongoDB及实战技巧与性能调优
  • android framework开发的技能要求
  • 哈希表实现
  • 微前端框架 Wujie
  • python3GUI--仿网课答题播放器 By:PyQt5(分享)
  • System.out 详解
  • ts与面向对象
  • trivy开源安全漏洞扫描器——筑梦之路
  • 操作系统:进程是一个非常重要的抽象概念
  • 投资者建议发行优惠套票给“被套”小股东,张家界:将研究考虑
  • 辽宁辽阳火灾3名伤者无生命危险
  • 五一小长假,带着小狗去上海音乐厅
  • “上报集团文化助力区域高质量发展赋能平台”揭牌
  • 澎湃思想周报丨数字时代的育儿;凛冬已至好莱坞
  • 国内生产、境外“游一圈”再进保税仓,这些“全球购”保健品竟是假进口