1019.链表中的下一个更大节点

98 阅读1分钟

题目:
给定一个长度为 n 的链表 head

对于列表中的每个节点,查找下一个 更大节点 的值。也就是说,对于每个节点,找到它旁边的第一个节点的值,这个节点的值 严格大于 它的值。

返回一个整数数组 answer ,其中 answer[i] 是第 i 个节点( 从1开始 )的下一个更大的节点的值。如果第 i 个节点没有下一个更大的节点,设置 answer[i] = 0 。
算法:
单调栈

func nextLargerNodes(head *ListNode) []int {
	array := make([]int, 0)
	node := head
	for node != nil {
		array = append(array, node.Val)
		node = node.Next
	}
	stack := make([]int, 0)
	ans := make([]int, len(array))
	for i := range array {
		for len(stack) != 0 && array[stack[len(stack) - 1]] < array[i] {
			ans[stack[len(stack) - 1]] = array[i]
			stack = stack[:len(stack) - 1]
		}
		stack = append(stack, i)
	}
	return ans
}