目录
题目
- 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。
题解:双指针
- 题目给的头节点是第一个元素,处理起来较麻烦(需单独处理头节点);加上习惯用一个空的头节点,所以本题新建了一个虚拟头节点,以便统一处理整个链表,最后返回的时候注意返回虚拟头节点的下一个节点即可。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def deleteDuplicates(self, head: Optional[ListNode]) -> Optional[ListNode]:
# 处理特殊情况:空链表或只有一个节点的链表
if head is None or head.next is None:
return head
dummy = ListNode(0) # 创建虚拟头节点
dummy.next = head#虚拟头节点指向原来的head
prev = dummy # 用于记录当前不重复节点的前一个节点
while head and head.next:
if head.val == head.next.val:
# 找到重复节点的最后一个元素
while head.next and head.val == head.next.val:
head = head.next
prev.next = head.next # 删除重复节点,头节点的下一个节点直接是不重复的第一个
else:
prev = prev.next#当head和他下一个点不重复的时候,prev指针后移一位
head = head.next#head指针后移一位
return dummy.next #由于dummy是虚拟节点直接返回他的下一个
标签:II,head,val,dummy,next,链表,82,节点
From: https://www.cnblogs.com/lushuang55/p/17991507