83. 删除排序链表中的重复元素(Easy)
题目描述
样例
Input: 1->1->2->3->3
Output: 1->2->3
解题思路
- 遍历找到重复元素
- 删除重复的元素
- 进一步查找
代码
# 第一种写法,一口气找到所有重复元素的末尾,直接删除
class Solution:
def deleteDuplicates(self, head: ListNode) -> ListNode:
if not head: return head
p = head
while p:
temp = p
while temp.next and temp.val == temp.next.val: # 1. 找到重复元素
temp = temp.next
p.next = temp.next # 2. tmp.next 指向的一定是非重复元素
p = p.next # 3. 进一步查找
return head
# 第二种写法,就是碰到同样的元素就删除
class Solution:
def deleteDuplicates(self, head: ListNode) -> ListNode:
if not head or not head.next: return head # 空 or 单
p = head
while p and p.next:
if p.val == p.next.val:
p.next = p.next.next
else:
p = p.next
return head