题目链接:[leetcode] 面试题 02.01. 移除重复节点
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def removeDuplicateNodes(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
# 思路:临时缓冲区,哈希表,时间/空间复杂度均为O(N)
# 实现:
# 设置空set() ,从头开始遍历链表元素,
# 判断:如果set()集合没有该元素,则添加到set集合中,继续往下遍历;
# 如果有,则删除该节点。
if not head or not head.next: # 空链表或者只有一个元素的链表,不用去重,直接返回
return head
sett = set()
sett.add(head.val)
p = head
while p.next:
if p.next.val not in sett:
sett.add(p.next.val)
p = p.next
else:
p.next = p.next.next
return head