给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有重复出现的数字。
示例 1:
输入: 1->2->3->3->4->4->5
输出: 1->2->5
示例 2:
输入: 1->1->1->2->3
输出: 2->3
这道题和83题相同之处在于,都是给一个排序链表。要求删除链表中重复的元素;不同之处在于,83题要求重复的元素只出现一次,而该题则要求如果元素有重复则全部删除。
-
首先新建结点拼接到链表头部,设置指针
p
指向新结点,cur
指向head
-
判断
cur.val
和cur.next.val
的关系:- 如果
cur.val == cur.next.val
,则执行cur = cur.next
,直到cur
指向的元素不等于当前元素 - 如果
cur.val != cur.next.val
,则执行cur = cur.next, p = p.next
,继续往后判断,直到cur.next == None
- 如果
AC code
class Solution:
def deleteDuplicates(self, head: ListNode) -> ListNode:
newhead = ListNode(-1)
p = newhead
p.next = head
cur = head
while cur and cur.next:
if cur.val != cur.next.val:
p = p.next
cur = cur.next
else:
val = cur.val
while cur and cur.val == val:
cur = cur.next
p.next = cur
return newhead.next