Approach 1: Stack # Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def removeNodes(self, head: Optional[ListNode]) -> Optional[ListNode]: stack = [] curr = head while curr: stack.append(curr) curr = curr.next n = len(stack) rightMaxes = [0] * n for j in range(n - 2, -1, -1): val = stack.pop().val rightMaxes[j] = max(rightMaxes[j + 1], val) tmp = newHead = ListNode() curr = head for i in range(n): # Invert condition if rightMaxes[i] <= curr.val: tmp.next = curr tmp = tmp.next curr = curr.next tmp.next = None return newHead.next Complexity Time: O(n) Space: O(n) Notes Other Languages