题解 | #删除有序链表中重复的元素-II#

删除有序链表中重复的元素-II

https://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024

# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param head ListNode类 
# @return ListNode类
#
class Solution:
    def deleteDuplicates(self , head: ListNode) -> ListNode:
        # write code here
        # 同样用集合的方法解决
        if not(head):
            return head
        visit = {head.val}
        this = head.next
        # 记录出现过的数字
        vnum = [] 
        while this:
            if this.val in visit:
                vnum.append(this.val)
            else:
                visit.add(this.val)
            this = this.next
        # 删除重复出现的元素
        # 找到第一个不重复的元素以此为头节点
        this = head
        while this:
            if this.val in vnum:
                this = this.next
            else:
                break
        # 若全部都是重复的,则this == None
        if not(this):
            return this
        
        # 找到第一个不重复元素,以此为头节点,并设置pre节点为this节点的前一个节点,方便后续删除节点
        newhead = this
        pre = newhead
        this = this.next
        # 开始删除元素
        while this:
            if this.val in vnum:
                pre.next = this.next
                this = this.next
            else:
                pre = this
                this = this.next
        # 返回新的头节点
        return newhead

全部评论

相关推荐

耀孝女:就是你排序挂了
点赞 评论 收藏
分享
勇敢的联想人前程似锦:如果我是你,身体素质好我会去参军,然后走士兵计划考研211只需要200多分。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-27 10:48
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务