题目描述:给定一个已排序的链表的头 head
, 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
# Definition for singly-linked list.
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def deleteDuplicates(self, head: ListNode) -> ListNode:
if head is None:
return head
p = head # head:头结点指针 便于返回链表 p:作用是添加结点进链表
while p.next is not None:
if p.val == p.next.val: # 如果本结点的值与下一个结点的值相同
p.next = p.next.next
else:
p = p.next
return head
击败了25%的用户。
方法二:递归
# Definition for singly-linked list.
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def deleteDuplicates(self, head: ListNode) -> ListNode:
if head is None or head.next is None: # 因为递归需要用到head.next
return head
# head链接的是以head.next为头指针的新的一个链表
head.next = self.deleteDuplicates(head.next)
# 把第一次递归写好 以后每次都是这个判断逻辑 每个指针都是新的头指针head
if head.val == head.next.val:
return head.next
else:
return head
与方法一时间复杂度相同,只是占用空间开销增大了。