这道题思路不难,但是我一共花了1个小时才AC,失败了两次,第三次提交AC,失败在了忘记加newTail.next=None导致pre后面的数也在最终返回的结果中。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def deleteDuplicates(self, head: ListNode) -> ListNode:
# 排除特殊情况,即原链表中无元素的情况
if head == None:
return None
pre = p = head # pre记录前一个结点,p记录当前结点
newHead = newTail = None # 结果链表的头指针
p = p.next
flag = True # 一个数第一次出现时给True
while p != None:
if flag == True and p.val != pre.val : #说明之前的数字只出现一次
if newHead == None:
newHead = newTail = pre
newTail.next = None
else:
newTail.next = pre
newTail = pre
newTail.next = None
flag = True # 说明当前数字也是第一次出现
elif flag == True and p.val == pre.val: #说明当前数字等于之前数字,flag改变
flag = False
elif flag == False and p.val != pre.val: #说明当前数字是一个新数字,flag改变
flag = True
pre = p
p = p.next
if flag == True: #说明之前的数字只出现一次
if newHead == None:
newHead = newTail = pre
else:
newTail.next = pre
newTail = pre
newTail.next = None
return newHead