# class ListNode: # def __init__(self, x): # self.val = x # self.next = None # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param head ListNode类 # @return ListNode类 # class Solution: """ 测试样例: {1,1,1} 预期结果:{} 解题思路: 1.使用两个数组 其中一个作为记录结果arr ,一个作为记录重复元素temp 2.最后arr中删除 temp 中出现的 重复元素 3. 定义一个newhead 拼接 arr 的元素为链表 """ def deleteDuplicates2(self , head: ListNode) -> ListNode: arr=[] temp=[] if not head: return head cur =head while cur: if cur.val not in arr: arr.append(cur.val) else: if cur.val not in temp: # temp 中不能有重复 temp.append(cur.val) cur=cur.next for i in temp: # 删除重复出现的 arr.remove(i) newHead=ListNode(-1) cur =newHead for i in arr: cur.next=ListNode(i) cur =cur.next return newHead.next """ 解题思路:牛客官方题解 升序链表特点:相同的元素都连续 比较到重复的元素,循环删除连续的节点,连接到第一个不相同的节点 添加 虚拟头结点 ,可能出现删除头结点 关键代码段: cur=pre #cur =head 应该指向虚拟头结点 否则删除不掉第一个节点 while cur.next and cur.next.next:# 关键点 if cur.next.val==cur.next.next.val: # 出现重复 进入删除操作 temp =cur.next.val # 记录当前重复值用于循环比较 while cur.next and cur.next.val==temp: cur.next=cur.next.next else: cur=cur.next if cur. 测试样例: {1,1,1} 预期结果:{} """ def deleteDuplicates(self , head: ListNode) -> ListNode: # write code here if not head : return None pre =ListNode(-1) # 虚拟头结点 pre.next=head cur=pre #cur =head 应该指向虚拟头结点 否则删除不掉第一个节点 while cur.next and cur.next.next:# 关键点 if cur.next.val==cur.next.next.val: # 出现重复 进入删除操作 temp =cur.next.val # 记录当前重复值用于循环比较 while cur.next and cur.next.val==temp: cur.next=cur.next.next else: cur=cur.next return pre.next