-
Notifications
You must be signed in to change notification settings - Fork 0
/
remove-nodes-from-linked-list_2487.py
46 lines (32 loc) · 1.2 KB
/
remove-nodes-from-linked-list_2487.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 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:
# The number of the nodes in the given list is in the range [1, 105].
# 1 <= Node.val <= 105
# ---------------------------------------Runtime 396 ms Beats 97.57% Memory 62.94 MB Beats 60.07%---------------------------------------
from typing import Optional
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]:
if head is None:
return head
head.next = self.removeNodes(head.next)
if head.next and head.val < head.next.val:
return head.next
return head