2487. Remove Nodes From Linked List

Difficulty:
Related Topics:
Similar Questions:

Problem

You are given the head of a linked list.

Remove every node which has a node with a greater value anywhere to the right side of it.

Return **the *head* of the modified linked list.**

  Example 1:

Input: head = [5,2,13,3,8]
Output: [13,8]
Explanation: The nodes that should be removed are 5, 2 and 3.
- Node 13 is to the right of node 5.
- Node 13 is to the right of node 2.
- Node 8 is to the right of node 3.

Example 2:

Input: head = [1,1,1,1]
Output: [1,1,1,1]
Explanation: Every node has value 1, so no nodes are removed.

  Constraints:

Solution

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var removeNodes = function(head) {
    var newHead = new ListNode(Number.MAX_SAFE_INTEGER, head);
    var stack = [newHead];
    var current = head;
    while (current) {
        while (current.val > stack[stack.length - 1].val) {
            stack.pop();
        }
        stack[stack.length - 1].next = current;
        stack.push(current);
        current = current.next;
    }
    return newHead.next;
};

Explain:

nope.

Complexity: