leetcode_83 删除排序链表中的重复元素

1,208 阅读1分钟

要求

存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。

返回同样按升序排列的结果链表。

示例 1:

image.png

输入:head = [1,1,2]
输出:[1,2]

示例 2:

image.png

输入:head = [1,1,2,3,3]
输出:[1,2,3]

提示:

链表中节点数目在范围 [0, 300] 内
-100 <= Node.val <= 100
题目数据保证链表已经按升序排列

核心代码

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
        
class Solution:
    def deleteDuplicates(self, head: ListNode) -> ListNode:
        if not head or not head.next:
            return head
        p = head
        while p and p.val == head.val:
            p = p.next
        head.next = self.deleteDuplicates(p)
        return head

image.png

重点题目

解题思路

首先这是一个排序的链表,使用递归的思想,我们每次只要返回递归处理,每次必定保留当前链表的头节点, 只要找到下一个跟头节点值不同的节点p即可。