题解:
class Solution:
def deleteDuplicates(self, head: ListNode) -> ListNode:
if head == None:
return None
slow = fast = head
# 如果快指针没有走到链表尾部节点之后,则一直循环
while fast != None:
if fast.val != slow.val:
slow.next = fast
slow = slow.next
fast = fast.next
# 断开slow节点和后面的连接,防止带上后面的重复元素
slow.next = None
return head
解题的思路和删除排序数组的重复元素是基本一样的,见:
删除有序数组中的重复项Python3_双子叶mm的博客-优快云博客
只多了一步slow.next = None,这一步是为了去掉slow节点后面和它重复的元素,例如:
head = [1,1,2,2],
slow节点到第一个2的时候,fast就已经走到尾部节点之后的None了,所以slow.next.val = 2,
如果不进行slow.next = None的操作,那么链表head = [1,2,2],所以必须加上这一步。