【leetcode】Delete duplicate elements in sorted list


# 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]:
        # Solution1
        """
        cur = head # 记录当前节点
        # 如果cur==None那么空链表直接返回
        # 如果cur.next==None那么链表只有一个节点直接返回
        # 如果链表至少有2个节点,进入下面的循环
        while cur and cur.next:
            # 如果出现了重复的元素,那么删除重复的元素,只保留一个重复的元素
            if cur.val == cur.next.val:
                # 找到重复元素的最后一个记作p
                p = cur.next
                while p.next and p.next.val==p.val:
                    p = p.next
                # 删除重复的元素,只保留一个重复的元素
                cur.next = p.next
            # 如果不是重复的元素,什么都不做
            # 那么cur指针移动到下一个位置
            
            cur = cur.next

        return head
        """

        # Solution2:代码更简洁了
        cur = head # 记录当前节点,保证当前节点永远不是重复的元素
        # 如果cur==None那么空链表直接返回
        # 如果cur.next==None那么链表只有一个节点直接返回
        # 如果链表至少有2个节点,进入下面的循环
        while cur and cur.next:
            # 如果出现了重复的元素,那么删除那个重复的元素,cur的next指向cur的next的next
            if cur.val == cur.next.val:
                cur.next = cur.next.next
            else:
            # 如果当前节点不是重复的元素,那么cur往下一个位置移动
                cur = cur.next
        return head

Guess you like

Origin blog.csdn.net/ningmengzhihe/article/details/127823999