首页 > 其他分享 >1019. 链表中的下一个更大节点

1019. 链表中的下一个更大节点

时间:2023-04-10 23:36:33浏览次数:53  
标签:head int stack 链表 1019 更大 节点

1019. 链表中的下一个更大节点

给定一个长度为 n 的链表 head

对于列表中的每个节点,查找下一个 更大节点 的值。也就是说,对于每个节点,找到它旁边的第一个节点的值,这个节点的值 严格大于 它的值。

返回一个整数数组 answer ,其中 answer[i] 是第 i 个节点( 从1开始 )的下一个更大的节点的值。如果第 i 个节点没有下一个更大的节点,设置 answer[i] = 0 。

 

示例 1:

输入:head = [2,1,5]
输出:[5,5,0]

示例 2:

输入:head = [2,7,4,3,5]
输出:[7,0,5,5,0]

 

提示:

  • 链表中节点数为 n
  • 1 <= n <= 104
  • 1 <= Node.val <= 109

方法:单调栈

class Solution {
    public int[] nextLargerNodes(ListNode head) {
        List<Integer> list = new ArrayList<>();
        while (head!=null) {
            list.add(head.val);
            head = head.next;
        }
        Deque<Integer> stack = new ArrayDeque<>();
        int n = list.size();
        int[] res = new int[n];
      //由题意,从后往前遍历
     for (int i = n-1;i >= 0;--i) {
            //将栈前所有不大于该节点的所有节点弹出
            while (!stack.isEmpty() && stack.peek() <= list.get(i)) {
                stack.pop();
            }
            //非空表明有比该节点值更大的节点在其后
            if (!stack.isEmpty()) {
                res[i] = stack.peek();
            }
            //将节点值压栈
            stack.push(list.get(i));
        }
        return res;
    }
}

 

标签:head,int,stack,链表,1019,更大,节点
From: https://www.cnblogs.com/fulaien/p/17304721.html

相关文章

  • 203. 移除链表元素
    参考链接:代码随想录题目描述:解题思路:由单链表的特殊性,如果删除的是头节点应该怎么操作呢?这里就涉及如下链表操作的两种方式:-直接使用原来的链表进行删除操作-设置一个虚拟头节点进行删除操作第一种操作: 移除头节点和移除其他节点的操作是不一样的,因为链表的其他节点......
  • #yyds干货盘点# LeetCode程序员面试金典:合并两个有序链表
    题目:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。  示例1:输入:l1=[1,2,4],l2=[1,3,4]输出:[1,1,2,3,4,4]示例2:输入:l1=[],l2=[]输出:[]示例3:输入:l1=[],l2=[0]输出:[0]代码实现:classSolution{publicLis......
  • 线性表之单链表
    定义初始化单链表尾插法建立单链表--正向建立单链表头插法建立单链表单链表的查找按位查找,返回第i个元素(带头结点)按值查找,找到元素值为x的点......
  • 数组、链表、跳表的基本实现和特性
    1.如何对链表加速  2.添加第一级索引  3.添加第二级索引  4.增加N级索引  5.思量及索引添加流程解释  5_1.如何找到数字8  5_2.如何找到数字9  6.跳表查询的时间复杂度分析  6_2.时间复杂度例题  ......
  • 链表专题--基础知识
    参考链接:代码随想录链表是一种通过指针串联在一起的线性结构,每个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。链表的入口节点称为链表的头节点也就是head,链表示意图如下所示:  链表的类型单链表刚才说......
  • 1019. 链表中的下一个更大节点
    题目链接:1019.链表中的下一个更大节点方法:单调栈解题思路该类问题详解:单调栈解决NextGreaterNumber一类问题代码classSolution{public:vector<int>nextLargerNodes(ListNode*head){vector<int>value;while(head!=nullptr){......
  • 链表
    1.顺序表的缺陷1.在顺序表头部中间插入数据,需要挪动数据效率低下2.容量不够时需要扩容,所以可能存在空间浪费链表可以很好的解决这些问题,下面讲解链表 2.链表概念及基本结构链表是一种逻辑上连续,物理内存空间非连续存储的线性结构typedefintSLDataType;typedefst......
  • 动力节点王鹤SpringBoot3笔记——第六章 远程访问@HttpExchange[SpringBoot 3]
    第六章 远程访问@HttpExchange[SpringBoot3]远程访问是开发的常用技术,一个应用能够访问其他应用的功能。SpringBoot提供了多种远程访问的技术。基于HTTP协议的远程访问是支付最广泛的。SpringBoot3提供了新的HTTP的访问能力,通过接口简化HTTP远程访问,类似Feign功能。Spring......
  • 5、链表
    1、链表我们可以用虚拟头结点dummyHead来简化添加、删除的操作publicclassLinkedList<E>{privateclassNode{publicEe;publicNodenext;publicNode(Ee,Nodenext){this.e=e;this.next=next;......
  • 6、递归链表
    链表具有天然的递归结构,下面我们将用递归实现链表的所有操作publicclassLinkedListR<E>{privateclassNode{publicEe;publicNodenext;publicNode(Ee,Nodenext){this.e=e;this.next=next;......