Description
Given the head of a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list. Return the linked list sorted as well.
Constraints:
• The number of nodes in the list is in the range [0, 300].
• -100 <= Node.val <= 100
• The list is guaranteed to be sorted in ascending order.
Example
Example 1:
Input: head = [1,2,3,3,4,4,5]
Output: [1,2,5]
Example 2:
Input: head = [1,1,1,2,3]
Output: [2,3]
Submissions
解题思路先考虑最简单的情况,假如是空链表,或者链表中只含有一个节点,这种情况下无需比较,直接返回即可。
除此以外,需要逐步比较,新建一个p节点和一个temp节点。p节点的下一个节点分两种情况:
1.如果遇到不重复的元素,p就更新为p.next,因为p指向的链表就是原链表,所以p.next是有值的
2.如果遇到重复的元素,p.next就指向重复元素之后第一个不重复的节点,即跨过了重复的元素
而temp节点是为了方便返回头节点,最后返回temp.next即可。
实现代码如下:
# 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 == None or head.next == None:
return head
p = temp = ListNode(0)
temp.next = head
while head and head.next:
if p.next.val != head.next.val:
p = p.next
head = head.next
else:
while head and head.next and p.next.val == head.next.val:
head = head.next
p.next = head.next
head = head.next
return temp.next