# 1019. Next Greater Node In Linked List 链表中的下一个更大节点

@TOC

## # 题目描述

We are given a linked list with `head` as the first node. Let's number the nodes in the list: `node_1, node_2, node_3, ...` etc.

Each node may have a next larger value: for `node_i`, `next_larger(node_i)` is the `node_j.val` such that `j > i`, `node_j.val > node_i.val`, and `j` is the smallest possible choice. If such a `j` does not exist, the next larger value is `0`.

Return an array of integers `answer`, where `answer[i] = next_larger(node_{i+1})`.

Note that in the example inputs (not outputs) below, arrays such as `[2,1,5]` represent the serialization of a linked list with a head node value of 2, second node value of 1, and third node value of 5.

Example 1:

``````Input: [2,1,5]
Output: [5,5,0]
``````

Example 2:

``````Input: [2,7,4,3,5]
Output: [7,0,5,5,0]
``````

Example 3:

``````Input: [1,7,5,1,9,2,5,1]
Output: [7,9,9,9,0,5,0,0]
``````

Note:

1. `1 <= node.val <= 10^9` for each node in the linked list.
2. The given list has length in the range `[0, 10000]`.

## # 解题方法

### # 单调递减栈

``````Input: [2,7,4,3,5]
Output: [7,0,5,5,0]
``````

2[0][0,0,0,0,0]
7[`1`][7,0,0,0,0]
4[1,2][7,0,0,0,0]
3[1,2,3][7,0,0,0,0]
5[1,5][7,0,5,5,0]

Python代码如下：

``````# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
"""
:rtype: List[int]
"""
nums = []
stack = []
res = [0] * len(nums)
for i, n in enumerate(nums):
while stack and nums[stack[-1]] < n:
res[stack.pop()] = n
stack.append(i)
return res
``````

C++代码如下：

``````/**
* struct ListNode {
*     int val;
*     ListNode *next;
*     ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
vector<int> nums;
}
vector<int> res(nums.size(), 0);
stack<int> s;
for (int i = 0; i < nums.size(); ++i) {
while (!s.empty() && nums[s.top()] < nums[i]) {
res[s.top()] = nums[i];
s.pop();
}
s.push(i);
}
return res;
}
};
``````

## # 日期

2019 年 4 月 5 日 —— 清明节休息一下～ 2019 年 9 月 27 日 —— 昨天面快手，竟然是纯刷题