代码改变世界

[LeetCode] 83. Remove Duplicates from Sorted List_Easy tag: Linked List

2019-04-30 10:35  Johnson_强生仔仔  阅读(211)  评论(0编辑  收藏  举报

Given a sorted linked list, delete all duplicates such that each element appear only once.

Example 1:

Input: 1->1->2
Output: 1->2

Example 2:

Input: 1->1->2->3->3
Output: 1->2->3


COde
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def deleteDuplicates(self, head: ListNode) -> ListNode:
        dummy = head
        while head and head.next:
            if head.val == head.next.val:
                head.next = head.next.next
            else:
                head = head.next
        return dummy

 



利用dummy来记住head,pre去记录上一个node,将head 和pre 比较(如果pre存在的话), 一旦相等,则删除掉head该点。注意,那个点实际上还是在,但是根据python的回收机制,没有指针指向该点,会被回收掉。
(也可以像code中那样,将head.next = None)

Code
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

class Solution:
    def removeDup(self, head):
        dummy, pre = head, None
        while head:
            if pre and head.val == pre.val:
                pre.next = head.next
head.next = None
else:
         pre = head head
= pre.next return dummy