Leetcode 82. 删除排序链表中的重复元素 II
题目
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 1:
输入: 1->2->3->3->4->4->5
输出: 1->2->5
示例 2:
输入: 1->1->1->2->3
输出: 2->3
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii
思路
思路1:
如果一个节点curr与前面的节点pre、后面的节点curr.next的值都不同,那么这个节点curr一定是不重复的。根据这个思路,即可解题。需要注意的是,第一个节点的初始化,需要将pre设为None,同时最后一个节点,没有next,需要单独考虑
代码
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def deleteDuplicates(self, head: ListNode) -> ListNode:
ss = ListNode(None)
ans = ss
pre = ss
curr = head
while (curr != None):
if(curr.next != None):
if (curr.val != pre.val and curr.val != curr.next.val):
ss.next = curr
ss = ss.next
pre = curr
curr = curr.next
else:
pre = curr
curr = curr.next
else:
if(curr.val != pre.val):
ss.next = curr
else:
ss.next = None
curr = curr.next
return ans.next