首页 > 其他分享 >82. 删除排序链表中的重复元素 II(中)

82. 删除排序链表中的重复元素 II(中)

时间:2024-01-27 15:46:18浏览次数:28  
标签:II head val dummy next 链表 82 节点

目录

题目

  • 给定一个已排序的链表的头 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

相关文章

  • 洛谷 P1749 [入门赛 #19] 分饼干 II 题解
    题目传送门先给结论:记\(S=1+2+\dots+k\),则当\(N\geS\)时为YES,当\(N<S\)时为NO。严谨一点,证明如下:若能成功分配饼干,记\(k\)名小朋友拿到的饼干数量分别为\(a_1,a_2,\dots,a_k\)。由于饼干数量各不相同且均为整数,不妨设\(a_1<a_2<\dots<a_k\),则\(a_2\gea_1+1,a_3\g......
  • 链表算法
    目录链表算法初始化节点1.删除链表的第N个节点2.删除链表中倒数第N个节点3.分块反转链表(K个一组翻转链表)4.反转链表I5.反转链表II(给定区间反转)6.判断是否为环形链表7.两数相加(两个链表相同位置相加)8.合并两个有序链表9.删除排序链表中的重复元素II10.旋转链表(将链表每个节......
  • 80. 删除有序数组中的重复项 II(中)
    目录题目题解:双指针题目给你一个有序数组nums,请你原地删除重复出现的元素,使得出现次数超过两次的元素只出现两次,返回删除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成。说明:为什么返回数值是整数,但输......
  • 代码随想录算法训练营第三天| 203.移除链表元素,707.设计链表 ,206.反转链表
    203.移除链表元素给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val==val 的节点,并返回 新的头节点 。题目链接:203.移除链表元素-力扣(LeetCode)注意c++中NULL和nullptr的区别。应该用nullptr来表示空指针。/***Definitionforsingly......
  • esp8266 no matching function for call to 'Ticker::Ticker()'
    这个错误表明在尝试创建一个Ticker对象时,编译器找不到适合当前调用的构造函数。Ticker可能是Arduino框架中的一个类,用于处理定时事件。解决方法:确认你已经包含了正确的头文件。例如,对于ArduinoESP8266核心库,你需要包含Ticker.h#include<Ticker.h> 确认......
  • 167. 两数之和 II - 输入有序数组(中)
    目录题目题解:双指针题目给你一个下标从1开始的整数数组numbers,该数组已按非递减顺序排列,请你从数组中找出满足相加之和等于目标数target的两个数。如果设这两个数分别是numbers[index1]和numbers[index2],则1<=index1<index2<=numbers.length。以长度......
  • 安装QuartusII13
    安装QuartusII13.0一、下载quartus软件方法一:通过Altera公司[官网]https://www.intel.cn/content/www/cn/zh/products/details/fpga/development-tools/quartus-prime.html下载对应版本,但是当下只能没有13.0的旧版本了方法二:百度网盘[链接]:<链接:https://pan.baidu.com/s/1nLh......
  • ASCII 表
    ASCII(发音:,AmericanStandardCodeforInformationInterchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语,而其扩展版本延伸美国标准信息交换码则可以部分支持其他西欧语言,并等同于国际标准ISO/IEC646。ASCII由电报码发展而来。第一版标准......
  • leecode链表
    LCR_207题  回文链表给定一个链表的 头节点 head ,请判断其是否为回文链表。如果一个链表是回文,那么链表节点序列从前往后看和从后往前看是相同的。1classSolution{2publicbooleanisPalindrome(ListNodehead){3ListNodep=head;4......
  • 代码随想录算法训练营第二天|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
    977.有序数组的平方给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/错误的vector遍历方式,这会导致访问越界!!!while(nums[flag]<0)flag++;倒也不难,我......