1
0
mirror of https://github.com/SunnyQjm/algorithm-review.git synced 2026-06-03 08:16:43 +08:00
Files
algorithm-review/chapter4/3_remove-duplicates-from-sorted-list.py
T
2020-06-29 11:58:15 +08:00

67 lines
1.7 KiB
Python

#!/usr/bin/env python
# coding=utf-8
################################################################################
# Leetcode 83 删除排序链表中的重复元素
#
# 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
#
# 示例 1:
# 输入: 1->1->2
# 输出: 1->2
#
# 示例 2:
# 输入: 1->1->2->3->3
# 输出: 1->2->3
################################################################################
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
def __repr__(self):
if self:
return "{}->{}".format(self.val, repr(self.next))
class Solution:
def deleteDuplicates(self, head):
"""
:type head: ListNode
:rtypr ListNode
(Knowledge)
1. 用两个指针,pre指向当前遍历节点的前一个节点,cur指向当前节点;
2. 每次查看当前值和上一次访问的数字是否相同,相同则执行删除节点操作,不相同则两个指针右移
"""
if not head:
return None
pre, cur = head, head.next
while cur:
if cur.val == pre.val:
pre.next = cur.next
else:
pre = cur
cur = cur.next
return head
if __name__ == '__main__':
solution = Solution()
h1 = ListNode(1)
h1.next = ListNode(1)
h1.next.next = ListNode(2)
print(solution.deleteDuplicates(h1), "= 1->2")
h1 = ListNode(1)
h1.next = ListNode(1)
h1.next.next = ListNode(2)
h1.next.next.next = ListNode(3)
h1.next.next.next.next = ListNode(3)
print(solution.deleteDuplicates(h1), "= 1->2->3")