leetcode 82 删除排序链表中的重复元素 II
z

给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。

示例 1:

1
2
输入: 1->2->3->3->4->4->5
输出: 1->2->5

示例 2:

1
2
输入: 1->1->1->2->3
输出: 2->3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 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
"""
if not head:
return head
prev = None
p = head
while p:
nex = p.next
while nex and nex.val == p.val:
nex = nex.next
if nex != p.next:
# nex 和 p 没有相邻,说明 p是有重复的,prev的next就需要跳过所有的p到nex
# 那如果没有prev时,说明head也没有确定,这是,将head暂定为nex,但是nex不一定能
# 满足要求,所以prev还是为None
if not prev:
head = nex
else:
prev.next = nex
else:
# 当确定p是只有一个值得时候,我们就让prev == p
prev = p
p = nex
return head