2487. Remove Nodes From Linked List

Medium

You are given the head of a linked list.

Remove every node which has a node with a strictly 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:

  • The number of the nodes in the given list is in the range [1, 105].

  • 1 <= Node.val <= 10^5

解題

先用 stack 消去比 head 小的節點,接著將 stack 內剩下的節點連在一起。

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func removeNodes(head *ListNode) *ListNode {
    stack := make([]*ListNode, 0)

    for head != nil {
        for len(stack) != 0 {
            top := stack[len(stack) - 1]
            if top.Val < head.Val {
                stack = stack[:len(stack) - 1]
            } else {
                break
            }
        }
        stack = append(stack, head)
        head = head.Next
    }

    for i:=0; i<len(stack) - 1; i++ {
        stack[i].Next = stack[i + 1]
    }

    return stack[0]
}

Last updated