# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next classSolution: defdeleteDuplicates(self, head: Optional[ListNode]) -> Optional[ListNode]: # 时间:遍历一次链表On # 空间:没有额外变量O1 l = head r = head
while r: if l.val != r.val: l = l.next l.val = r.val r = r.next if l: l.next = None return head
# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next classSolution: defremoveNodes(self, head: Optional[ListNode]) -> Optional[ListNode]: # 如果用反转链表,就不需要记录值,一旦下个值比当前小就删除,还不用遍历第二遍,那就只有On的时间 # 时间:两次遍历链表,第一次收集值,第二次删除,On # 空间:记录链表值一遍,On nums = [] cur = head while cur: nums.append(cur.val) cur = cur.next iflen(nums) == 1: # 排除链表长度为1的情况 return head
for i inrange(len(nums)-2, -1, -1): # 最大后缀 nums[i] = nums[i] if nums[i] > nums[i+1] else nums[i+1]
dummy = ListNode(next=head) cur = dummy for i inrange(len(nums)): if cur.next.val < nums[i]: cur.next = cur.next.next else: cur = cur.next return dummy.next