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

【百日算法计划】:每日一题,见证成长(007)

题目

移除链表元素

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点
示例:
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]

思路1

不引入虚拟头节点 (需要对头节点特殊处理)

 public ListNode removeElements1(ListNode head, int val) {if (head == null) return null;ListNode prev = head;while (prev.next != null){if (prev.next.val == val){prev.next = prev.next.next; //注意这个时候prev不需要后移} else {prev = prev.next;}}//因为是从prev.next开始判断的,所以第一个节点没有判断到,需要特殊处理if (head.val == val){head = head.next;}return head;
}

思路2

引入虚拟头节点

public ListNode removeElements2(ListNode head, int val) {ListNode host = new ListNode();//创建一个虚拟头节点host.next = head;ListNode pre = host;while (pre.next != null){if (pre.next.val == val){pre.next = pre.next.next;} else {pre = pre.next;}}return host.next;
}

思路3

引入一个新的结果链表,利用tail指针尾插

public ListNode removeElements3(ListNode head, int val) {ListNode host = new ListNode();//创建一个虚拟头节点ListNode tail = host; //tail指针ListNode p = head;while (p != null){ListNode temp = p.next;if (p.val != val){p.next = null;tail.next = p;tail = p;}p = temp.next;}return host.next;
}

http://www.mrgr.cn/news/18689.html

相关文章:

  • 【位运算】--- 进阶题目赏析
  • 【数据分享】地级市-国际互联网用户数(2001-2019年)
  • 【Git】IDEA代码合并|merge into
  • 自动生成视频的软件有哪些??5款工具助你快速成片
  • ElasticSearch-数据建模
  • Java 入门指南:Java 并发编程 —— StampedLock 读写锁
  • 将python项目打包成一个可执行文件(包含需要的资源文件)
  • 无人机地理测绘技术详解
  • 自定义实现log4j的appender
  • React 更新界面
  • 前端框架的演变与选择
  • 大模型开发转行全攻略:必备知识、技能与学习路径详解,大模型零基础入门到精通
  • 视频合并怎么操作?这篇文章告诉你
  • 快速写一个自己的flutter应用(新手入门)
  • 数据首发!车载手机无线充前装搭载率破40%,哪些玩家在领跑
  • 【编程底层思考】什么是逃逸分析,基于逃逸分析可以做哪些优化(分离对象或标量替换\栈上分配\同步锁消除)
  • 包装和类练习(1)
  • 兔子生崽问题
  • 了解Python的生成器及其优点
  • window安装rocketmq