LeetCode-Next Greater Node In Linked List

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24133491/article/details/89139157

Description:
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].

题意:计算链表中每一个元素右边比自己大的第一个元素,如果不存在这个元素则返回0;

解法:可以利用栈来实现找到某一个元素右边比自己大的第一个元素,假设我们定义栈stack和要计算的数组array,整个过程如下

  1. 遍历数组array,当前位置为i
  2. 如果栈非空且array[i]大于array[栈顶元素],那么array[栈顶元素]右边第一个比自己大的元素就是array[i],将栈顶元素出栈;持续这个过程直到不满足条件为止;
  3. 将位置i入栈
  4. 循环结束后,栈可能不为空,说明这个时候array[栈中的元素]已经找不到在右边比自己大的元素了
Java
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public int[] nextLargerNodes(ListNode head) {
        ArrayList<Integer> nodes = new ArrayList<>();
        while (head != null) {
            nodes.add(head.val);
            head = head.next;
        }
        int[] res = new int[nodes.size()];
        LinkedList<Integer> stack = new LinkedList<>();
        for (int i = 0; i != res.length; i++) {
            while (!stack.isEmpty() && nodes.get(i) > nodes.get(stack.peekLast())) {
                res[stack.pollLast()] = nodes.get(i);
            }
            stack.addLast(i);
        }
        
        return res;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_24133491/article/details/89139157