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

【LeetCode每日一题】2487. 从链表中移除节点(调用栈+递归+翻转链表)

2024-1-3

文章目录

      • [2487. 从链表中移除节点](https://leetcode.cn/problems/remove-nodes-from-linked-list/)
            • 方法一:调用栈
            • 方法二:递归
            • 方法三:翻转链表

2487. 从链表中移除节点

在这里插入图片描述

方法一:调用栈

1.将所有节点按顺序压入栈中

2.从栈顶依次查看元素

3.当栈顶节点的值大于新链表表头的值,将该节点插入新链表的表头

4.否则移除该节点

    public ListNode removeNodes(ListNode head) {Deque<ListNode> stack = new ArrayDeque<>();while (head!=null){stack.push(head);head = head.next;}while (!stack.isEmpty()){if (head==null||stack.peek().val>=head.val){stack.peek().next = head;将该节点插入新链表的表头head = stack.peek();//表头前移}stack.pop();}return head;}
方法二:递归

1.节点为空返回

2.不为空,对右侧节点进行判断

3.比右侧节点小,移除当前结点,返回下一个结点

4.比右侧节点大,返回当前结点

    public ListNode removeNodes(ListNode head) {if (head == null){return null;}head.next = removeNodes(head.next);if (head.next!=null && head.val < head.next.val){return head.next;}else {return head;}}
方法三:翻转链表

1.翻转链表、要求改为:移除每一个左侧有一个更大数值的节点。

2.不断移除右结点,除非右结点的值大于等于当前结点

3.再翻转回来

    public ListNode removeNodes3(ListNode head) {head = reverse(head);ListNode cur = head;while (cur.next!=null){if (cur.val>cur.next.val){//当前值比右边值大,删除右边结点cur.next = cur.next.next;}else {cur = cur.next;}}return reverse(head);//翻转回来}public ListNode reverse (ListNode head){//翻转链表ListNode dummy = new ListNode();while (head!=null){ListNode cur = head;head = head.next;cur.next = dummy.next;dummy.next = cur;}return dummy.next;}

点击移步博客主页,欢迎光临~

偷cyk的图

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

相关文章:

  • 开源协助平台工程灵活应对多云时代的挑战
  • Springboot通过profiles切换不同环境使用的配置
  • SpringBoot入门到精通-Spring Boot Jasypt Encrypt 演示
  • 整数的阶乘(英语:factorial)是所有小于及等于
  • 音视频通信
  • docker 搭建gitlab 恢复和备份
  • 尚硅谷2023版Promise教程从入门到实战(讲师:任安萍)
  • 【SpringBoot】分组校验和自定义校验
  • 19、BLIP-2
  • 【微服务核心】MyBatis Plus
  • 什么是Alibaba Cloud Linux?完全兼容CentOS,详细介绍
  • Spark---RDD算子(单值类型Value)
  • 数据库中的MVCC--多版本并发控制
  • wps将姓名处理格式为:姓**
  • 2023年我的编程之旅:技术演进与自我成长的纪录
  • 好用免费的WAF---如何安装雷池社区版
  • 看似 bug 又非 bug 的一个 bug
  • mysql常见问题
  • QT上位机开发(串口界面设计)
  • k8s之pod
  • 第二百四十三回 再分享一个Json工具
  • electron自定义菜单
  • 变量和函数提升(js的问题)
  • Excel 插件:ASAP Utilities Crack
  • hyperf 十九 数据库 二 模型
  • 使用python快速开发与PDF文档对话的Gemini聊天机器人
  • Spring Cloud Gateway集成Knife4j
  • Hive10_窗口函数
  • ipvsadm命令详解
  • zabbix通过自动发现-配置监控项、触发器(小白教程)