旺崽的博客

要么天赋异禀,要么天道酬勤

0%

LeetCode 82 删除排序链表中的重复元素 II

题目链接

存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。

返回同样按升序排列的结果链表。

示例 1:

1
2
输入:head = [1,2,3,3,4,4,5]
输出:[1,2,5]

示例 2:

1
2
输入:head = [1,1,1,2,3]
输出:[2,3]

链表操作~
我的方法是遍历一遍链表结点,对某一结点 $q$,判断 $q.next$ 的值和 $q.next.next$,如果相等就存下那个值 $val$,新建一个指针右移到值不为 $val$ 的结点上,再把这个结点接到 $q.next$ 上,重复上述操作即可,AC代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution:
def deleteDuplicates(self, head: ListNode) -> ListNode:
q = ListNode()
q.next = head
ans = q
while q and q.next and q.next.next:
while q.next and q.next.next and q.next.val == q.next.next.val:
val = q.next.val
p = q.next
while p and p.val == val:
p = p.next
q.next = p
q = q.next
return ans.next