[LeetCode]Next Greater Node In Linked List

题目描述:

LeetCode 1019. Next Greater Node In Linked List

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_inext_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].

题目大意:

给定链表,返回链表每个元素之后距离最近且值更大的元素。

解题思路:

栈(Stack)

记结果数组为ans

遍历链表,用栈维护所有不小于当前元素的数字及下标。

将栈顶所有小于当前元素head.val的数字tv及下标ti弹出,令其ans[ti] = head.val

Python代码:

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

class Solution(object):
    def nextLargerNodes(self, head):
        """
        :type head: ListNode
        :rtype: List[int]
        """
        stack = []
        ans = []
        cnt = 0
        while head:
            ans.append(0)
            while stack and stack[-1][0] < head.val:
                tv, ti = stack.pop()
                ans[ti] = head.val
            stack.append((head.val, cnt))
            cnt += 1
            head = head.next
        return ans

 

本文链接:http://bookshadow.com/weblog/2019/03/31/leetcode-next-greater-node-in-linked-list/
请尊重作者的劳动成果,转载请注明出处!书影博客保留对文章的所有权利。

如果您喜欢这篇博文,欢迎您捐赠书影博客: ,查看支付宝二维码

Pingbacks已关闭。

暂无评论

张贴您的评论