给定一个长度为 n 的链表 head对于列表中的每个节点查找下一个 更大节点 的值。也就是说对于每个节点找到它旁边的第一个节点的值这个节点的值 严格大于 它的值。返回一个整数数组 answer 其中 answeri 是第 i 个节点 从1开始 的下一个更大的节点的值。如果第 i 个节点没有下一个更大的节点设置 answeri = 0 。请编写Java程序实现
思路:利用单调栈,维护一个单调递减的栈。遍历链表,如果当前节点的值比栈顶元素大,则说明栈顶元素的下一个更大节点就是当前节点,将栈顶元素出栈,并将其下一个更大节点值设置为当前节点的值。重复该过程直到当前节点小于等于栈顶元素,将当前节点入栈。最后遍历完链表后,栈中剩余的节点没有下一个更大节点,将它们的答案设置为0即可。
时间复杂度:O(n),空间复杂度:O(n)。
Java代码如下:
class Solution {
public int[] nextLargerNodes(ListNode head) {
List
原文地址: https://www.cveoy.top/t/topic/bR7g 著作权归作者所有。请勿转载和采集!