跟着专注于计算机视觉的AndyJ的妈妈我学算法之每日一题leetcode82. 删除排序链表中的重复元素 II

这个题的思路停重要。就是当前是pre(最开始初始化到None),然后我去判断,pre.next是不是独一无二的(pre.val, pre.next.val, pre.next.next.val),如果是,则加入(pre.next)到结果链表。如果不是,那就pre往后移动一个,那显然,这样会找到一个pre.next是独一无二的结点,这个时候再加入到结果链表。

毕竟三个连续数字,只要中间这个和左右的都不等,那他肯定是独一无二的。就这个思路。
好了,看题:

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

示例 1:

输入: 1->2->3->3->4->4->5
输出: 1->2->5
示例 2:

输入: 1->1->1->2->3
输出: 2->3

code:

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def deleteDuplicates(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        if not head: return None
        cur = ListNode(None)
        pre = ListNode(None)
        nhead = cur
        pre.next = head
        while pre.next.next:
            if pre.val != pre.next.val != pre.next.next.val:
                cur.next = pre.next
                cur = cur.next
                pre = pre.next
            else:
                pre = pre.next
        if pre.next.val != pre.val:
            cur.next = pre.next
            cur = cur.next
        cur.next = None # 这行很关键,就是把后边没用的断掉
        return nhead.next

好了。

你可能感兴趣的:(leetcode)