题解采用的是递归方法来解决问题。首先,判断当前节点是否为尾节点,如果是,则直接返回该节点。否则递归调用当前函数处理当前节点的下一个节点。在递归返回后,比较当前节点的值与其下一个节点的值。如果当前节点的值小于下一个节点的值,则说明当前节点应该被移除,因此返回下一个节点。如果不是,则保留当前节点,返回当前节点。这样递归处理可以确保从链表末尾开始逐个检查节点,每次递归返回时都能决定是否保留当前节点。
时间复杂度: O(n)
空间复杂度: O(n)
# 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]:
if head is None:
return None
# 递归处理下一个节点
head.next = self.removeNodes(head.next)
# 比较当前节点与下一个节点的值,决定是否移除当前节点
if head.next is not None and head.val < head.next.val:
return head.next
else:
return head