leetcode链表中的下一个更大节点

1.单调栈

使用一个栈s存储元素下标,结果数组res存储最终的结果

遍历链表中的每一个元素,如果当前元素的值大于栈顶所指向的元素,则栈顶对应的下标的下一个最大值是当前节点的值,弹出栈顶节点;

将当前节点入栈,参与寻找比其大的值

最后栈中剩余的都是未找到比起大的元素,则比其大的值设为0

代码如下:

// 栈解法
class Solution {
public:
    vector<int> nextLargerNodes(ListNode* head) {
        vector<int> res;
        stack<int> s;//栈中存放的是下标
        int i = 0;
        
        while(head != nullptr) {
            while(!s.empty() && head->val > res[s.top()]) {
                res[s.top()] = head->val;
                s.pop();
            }
            
            res.push_back(head->val);
            s.push(i++);
            head = head->next;
        }
        //栈中剩余的下标是未找到下一个最大值的元素
        while(!s.empty()) {
            res[s.top()] = 0;
            s.pop();
        }
        
        return res;
    }
};
发布了219 篇原创文章 · 获赞 3 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_38196982/article/details/105040637
今日推荐