1019. Next Greater Node in Linked List

1019. Next Greater Node In Linked List #

Problem #

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 <= node.val <= 10^9 for each node in the linked list.
  • The given list has length in the range [0, 10000].

Problem Summary #

Given a linked list, find the first node after each node whose value is greater than that node’s value. If such a node cannot be found, output 0.

Solution Approach #

This problem is similar to Problems 739, 496, and 503. There are also 2 solution methods. First store the numbers in the linked list into an array, and the overall idea of the problem becomes exactly the same as Problem 739. The ordinary approach is 2 nested loops. The optimized approach is to use a monotonic stack, maintaining a monotonically decreasing stack.

Code #


package leetcode

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */

// Solution 1: Monotonic stack
func nextLargerNodes(head *ListNode) []int {
	type node struct {
		index, val int
	}
	var monoStack []node
	var res []int
	for head != nil {
		for len(monoStack) > 0 && monoStack[len(monoStack)-1].val < head.Val {
			res[monoStack[len(monoStack)-1].index] = head.Val
			monoStack = monoStack[:len(monoStack)-1]
		}
		monoStack = append(monoStack, node{len(res), head.Val})
		res = append(res, 0)
		head = head.Next
	}
	return res
}



Calendar Jun 25, 2026
Edit Edit this page
Total visits:   You are visitor No.
中文