2025年--Lc298-1019. 链表中的下一个更大节点(栈)--java版

1.题目

2.思路

(1)栈中存的元素:每个元素是 int\[\]{节点值, 节点下标},比如 {2, 0} 表示:

这个节点的值 = 2

它在结果数组中的位置 = 0

new int\[\]{cur.val, cnt}

··············

res 是"答案列表",按链表顺序存每个节点的【下一个更大节点的值】。

先假设它没有更大值,预填 0

(2)从栈底到栈顶,节点值是单调递减的。

遍历到一个新节点 cur 时,如果 cur.val 比栈顶的小或相等,那它也"没有更大值",先压栈。

一旦 cur.val 比栈顶的大,就说明:

对栈顶那个节点来说,当前的 cur.val 就是它"后面第一个更大的值",

那就把栈顶弹出,同时在结果数组对应位置写上 cur.val。

(3)遍历完链表后:

栈里剩下的节点就说明后面再也没更大的了,

你之前已经 res.add(0) 预填了 0,直接保留就行。



3.代码实现

java 复制代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public int[] nextLargerNodes(ListNode head) {
        List<Integer> res=new ArrayList<>();
        Deque<int[]> st=new ArrayDeque<int[]>();
        ListNode cur=head;
        int cnt=-1;
        while(cur!=null)
        {
            cnt++;
            res.add(0);//如果没找到比当前元素更大的元素返回0
            //当栈不空,且取出栈顶数组的第一个元素
            while(!st.isEmpty()&&st.peek()[0]<cur.val)
            {
                res.set(st.pop()[1],cur.val);
            }
            st.push(new int[]{cur.val,cnt});
            cur=cur.next;
        }
        //将列表转换成数组
        int size=res.size();
        int[] arr=new int[size];
        for(int i=0;i<size;i++)
        {
            arr[i]=res.get(i);
        }
        return arr;
        
    }
}
相关推荐
long31624 分钟前
封装(Encapsulation)
java·人工智能·ai·ai编程
yaoxin52112326 分钟前
502. Java 反射 - 编写 MessageInterceptor 类
java·开发语言
风流 少年30 分钟前
Spring AI 2.0:阿里云百炼平台(工作流应用)
java·后端·spring
长谷深风11136 分钟前
AI Tool 设计:粒度、参数与错误恢复怎么做
java·大数据·人工智能·ai agent·agent工作流·智能体设计·ai产品设计
疯狂打码的少年2 小时前
【数据结构】交换类排序:冒泡与快速排序
数据结构·笔记·算法·排序算法
QQ_21696290962 小时前
【项目编号:project95315】SpringBoot公共自习室管理系统:座位预约、房间管理、签到核销、公告规则完整实战
java·spring boot·后端
嵌入式阿蔡2 小时前
面试高频考点 01:volatile / 中断 / 堆栈 八股精讲
java·面试·职场和发展·嵌入式实时数据库
Nil2082 小时前
leetcode 108有序数组转换为二叉搜索树
数据结构·算法·leetcode
hn小菜鸡2 小时前
LeetCode 763、划分字母区间
数据结构·算法·leetcode
秋饼2 小时前
LangChain4j + Java 实现企业级 Text-to-SQL 智能问数系统:从自然语言到安全可控的数据洞察
java·ai·技术分享·后端开发