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; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!