给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 1:
输入: 1->2->3->3->4->4->5
输出: 1->2->5
示例 2:
输入: 1->1->1->2->3
输出: 2->3
解题思路
参考之前的文章Leetcode 83:删除排序链表中的重复元素(最详细解决方案!!!)
我们可以很快速的解决这个问题。
h -> 1 -> 2 -> 3 -> 3 -> 4 -> 4 -> 5
pre cur
我们始终要让pre
在cur
的前面,通过判断 ==
判断重复元素是否存在。
h -> 1 -> 2 3 3 4 -> 4 -> 5
| |
----------------
pre cur
如果存在重复元素的话,我们=;cur=
,如果不存在重复元素,我们pre=cur;cur=
,所以这里我们要通过一个变量标记是否存在重复元素。最后代码如下
class Solution:
def deleteDuplicates(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
h = ListNode(-1)
h.next = head
pre = h
cur = head
while cur != None:
duplicate = False
while cur.next != None and cur.val == cur.next.val:
cur = cur.next
duplicate = True
if duplicate == False:
pre = cur
else:
pre.next = cur.next
cur = cur.next
return h.next
我将该问题的其他语言版本添加到了我的GitHub Leetcode
如有问题,希望大家指出!!!