1. Перебрать список и удалить следующий узел, если его значение соответствует текущему узлу.

2. Операцию удаления можно просто выполнить, установив следующий указатель на следующий указатель следующего узла.

Примечания:

  1. O(n) времени, O(1) пространства
  2. Обратите внимание, как мы можем избежать добавления отдельного условия для пустого списка.
# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution(object):
    def deleteDuplicates(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        p = head
        while p:
            while p.next and p.val == p.next.val:
                p.next = p.next.next
            p = p.next
        return head
    def deleteDuplicates(self, head):
        if not head: return None
        p = head
        while p.next:
            if p.val == p.next.val:
                p.next = p.next.next
            else:
                p = p.next
        return head