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

leetcode——203.移除链表元素

在这里插入图片描述

文章目录

    • 🐨1.题目
    • 🪅2.解法1-头节点迭代
      • 🌿2.1 思路
      • 🌿2.2 代码实现
    • 🦆3. 解法2-创建新链表
      • 🎏3.1 思路
      • 🎏3.2 代码实现
    • 🐐4. 题目链接

🐨1.题目

给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val == val的节点,并返回新的头节点

示例 1:
在这里插入图片描述

输入: head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]

示例 2:

输入: head = [], val = 1
输出:[]

示例 3:

输入: head = [7,7,7,7], val = 7
输出: []

提示:

  • 列表中的节点数目在范围 [0, 104] 内
  • 1 <= Node.val <= 50
  • 0 <= val <= 50

🪅2.解法1-头节点迭代

🌿2.1 思路

我们可以定义两个指针,一个指针cur指向头节点,遍历链表,遇到相同的值讲节点删除,但是如果将节点直接释放,则会找不到下次需要指向的位置;所以还需用另一个指针prev记录当前节点的前一个位置,便于修改next指针。

注意事项:

  1. 在删除头节点时,要更新头节点指针head,防止链表丢失。
  2. 删除节点时,需先保存该节点的next,防止野指针。

🌿2.2 代码实现

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

🦆3. 解法2-创建新链表

🎏3.1 思路

我们可以创建一个新的链表,将不等于val的值尾插到新链表,最后返回新链表的头节点位置。

注意事项:

  1. 需要考虑新链表为空(全部都是需要删除的值)和链表为空的情况
  2. 如果最后一个值为要删除的值,则需要手动讲尾节点的next置空。

🎏3.2 代码实现

struct ListNode* removeElements(struct ListNode* head, int val){struct ListNode*newhead = NULL,*tail = NULL;struct ListNode*cur = head;while(cur){if(cur->val != val){//尾插if(tail == NULL){newhead = tail = cur;}else{tail->next = cur;tail = tail->next;}cur = cur->next; }else{struct ListNode*next = cur->next;free(cur);cur = next;}}if(tail)tail->next = NULL;return newhead;
}

🐐4. 题目链接

leetcode–203.移除链表元素

http://www.lryc.cn/news/41069.html

相关文章:

  • GPT-4来袭:开启人工智能新时代
  • 芯微电子IPO终止:业绩开始大幅下滑,王日新、王苟新兄弟不同命
  • 【C++】用手搓的红黑树手搓set和map
  • 【C++】空指针弃NULL用nullptr
  • 【selenium学习】数据驱动测试
  • 嵌入式硬件电路设计的基本技巧
  • Spring MVC 图片的上传和下载
  • 远程工具神器之MobaXterm (小白必看)
  • VRIK+Unity XR Interaction Toolkit 实现VR上半身的追踪(附带VRM模型导入Unity方法和手腕扭曲的解决方法)
  • 【C++进阶】map的介绍和使用
  • 第十四届蓝桥杯三月真题刷题训练——第 15 天
  • HTML5是什么?怎么学习HTML5?
  • 个人算法题精简导航整理(精炼汇总,含知识点、模板题、题单)
  • Mac 和 Win,到底用哪个系统学编程?
  • 文心一言---中国版的“ChatGPT”狂飙的机会或许要出现了
  • 2023最全Python+Selenium环境搭建教程-你绝对想不到有这么简单!
  • JavaSe第10次笔记
  • 【C语言笔记】自定义类型全解
  • 文心一言硬刚ChatGPT。文心一言能否为百度止颓?中国版ChatGPT“狂飙”的机会在哪儿?
  • 【RabbitMQ笔记10】消息队列RabbitMQ之死信队列的介绍
  • Python04 数据序列-字符串
  • Redis限流接口防刷
  • Yarn 资源调度器
  • 通达信 34日上升三角形主图源码
  • CSDN周赛第37期题解(Python版)
  • 程序调试方法
  • 【Android入门到项目实战--2.3】—— 活动的四种启动模式(standard、singleTop、singleTask、singleInstance)
  • SpringCloud微服务技术栈.黑马跟学(三)
  • 学习Java——集合类
  • [前端笔记035]vue2之脚手架vue-cli