单调栈,主要用于记录数组中每个元素的下一个更大值。
为了在O(n)时间复杂度内完成这个目标,需要从后往前维护一个单调递增栈,栈中依次存储当前下一个位置到数组尾的下一个更大值。因此,对于每个位置的更新,只需要从栈中将小值出栈,直到寻找到比当前值大的值即可。
话不多说直接看题
1019. Next Greater Node In Linked List
题意:
给定一个链表, 对于每个节点,记录链表中下一个比当前节点大的节点值,最终结果用数组返回。
思路:
寻找下一个更大节点问题,典型的单调栈问题,首先将链表转化为数组即可直接套单调栈模板
代码:
/*
Author Owen_Q
*/
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
vector<int> nextLargerNodes(ListNode* head) {
int n = 0;
vector<int> a;
while(head!=NULL)
{
a.push_back(head->val);
n