码迷,mamicode.com
首页 > 其他好文 > 详细

83. Remove Duplicates from Sorted List

时间:2019-04-05 12:14:40      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:nbsp   duplicate   Once   lse   put   复杂   inpu   one   思路   

1. 原始题目

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

2. 题目理解

给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。

没看清排序,所以最初写了一个稍稍复杂的代码。

 

3. 解题

思路:应为是排序,所以重复数字只看可能是相邻的。例如11112233369。重复的1互相挨着,重复的2也互相挨着。所以用两个指针分别滑动,前面的指针负责滑过所有重复元素,后面的指针负责将两个不同的元素相连。

1)适用于一切链表(可以是非排序的)。需借助一个列表来判断是否有重复元素

 1 class Solution:
 2     def deleteDuplicates(self, head: ListNode) -> ListNode:
 3         if not head:
 4             return None
 5         head_ = head
 6         i = head
 7         j = head.next
 8         unique = []         # 元素池。里面存放非重复元素
 9         while(j):
10             unique.append(i.val)      # 将新不重复元素添加
11             while j and (j.val in unique):
12                 j = j.next           # 过滤掉重复元素
13             i.next = j
14             i = i.next
15             if j:
16                 j = j.next
17         return head_ 

验证:

 1 listnode1 = ListNode_handle(None)
 2 s1 = [1,2,3,666,8,3,2,9,4,5,6,8,999,666]
 3 #s1 = [1,1]
 4 for i in s1:
 5     listnode1.add(i)
 6 listnode1.print_node(listnode1.head)
 7 
 8 
 9 s = Solution()
10 head = s.deleteDuplicates(listnode1.head)
11 listnode1.print_node(head)

1 2 3 666 8 3 2 9 4 5 6 8 999 666
1 2 3 666 8 9 4 5 6 999

 

2)对应于本题,不会有乱序。

 1 class Solution:
 2     def deleteDuplicates(self, head: ListNode) -> ListNode:
 3         if not head:
 4             return None
 5         head_ = head
 6         i = head
 7         j = head.next
 8         while(j):
 9             if i.val == j.val:
10                 j = j.next
11             else:
12                 i.next = j
13                 i = i.next
14                 j = j.next
15         i.next = j
16         return head_  

验证:

 1 listnode1 = ListNode_handle(None)
 2 #s1 = [1,2,3,666,8,3,2,9,4,5,6,8,999,666]
 3 s1 = [1,1,1,2,2,2,2,3,6,66,66,666,666,6666666]
 4 for i in s1:
 5     listnode1.add(i)
 6 listnode1.print_node(listnode1.head)
 7 
 8 
 9 s = Solution()
10 head = s.deleteDuplicates(listnode1.head)
11 listnode1.print_node(head)

1 1 1 2 2 2 2 3 6 66 66 666 666 6666666
1 2 3 6 66 666 6666666

83. Remove Duplicates from Sorted List

标签:nbsp   duplicate   Once   lse   put   复杂   inpu   one   思路   

原文地址:https://www.cnblogs.com/king-lps/p/10658339.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!