Leetcode 82:删除排序链表中的重复元素 II(最详细解决方案!!!)

给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。

示例 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

我们始终要让precur的前面,通过判断cur.val == cur.next.val判断重复元素是否存在。

 h -> 1 -> 2    3    3    4 -> 4 -> 5
           |              |
           ----------------
          pre            cur

如果存在重复元素的话,我们pre.next=cur.next;cur=cur.next,如果不存在重复元素,我们pre=cur;cur=cur.next,所以这里我们要通过一个变量标记是否存在重复元素。最后代码如下

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

如有问题,希望大家指出!!!

猜你喜欢

转载自blog.csdn.net/qq_17550379/article/details/80668036
今日推荐