Leetcode ☞ 82. Remove Duplicates from Sorted List II ☆

在中国大陆使用 LiveKit 集成阿里云语音交互服务 通过集成阿里云的语音和模型服务,我们可以快速构建出适合中国用户的 LiveKit 智能语音应用。LiveKit Agents 框架的模块化设计使得替换底层服务变得异常简单,只需要更换相应的插件实例即可。使用 WebSocket 版本的阿里云 ASR 接口以获得更低的延迟。利用通义千问的 Function Calling 能力对接智能家居或企业内部 API。结合 LiveKit 的视频处理能力,打造具备视觉交互的数字人。希望这篇博客能为你在实时音视频与 AI 结合的探索之路上提供帮助! 阅读详情

82. Remove Duplicates from Sorted List II

My Submissions
Total Accepted: 67074  Total Submissions: 253195  Difficulty: Medium

Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.

For example,
Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.











我的AC:(4ms,最快一批)

struct ListNode* deleteDuplicates(struct ListNode* head) {
    if(!head || !head->next)
        return head;
    struct ListNode *dummy = (struct ListNode*)malloc(sizeof(struct ListNode));
    dummy->next = head;
    struct ListNode *p = dummy;
    struct ListNode *last = NULL;
    
    while(p->next && p->next->next){//p->next->next必须要加,不然runtime error
        if(p->next->val == p->next->next->val){
            last = p->next;
            p->next = p->next->next;
        }
        else if(last && p->next->val == last->val)
            p->next = p->next->next;
        else
            p = p->next;
    }
    if(last && p->next->val == last->val)
            p->next = p->next->next;
            
    return dummy->next;
}

关键:

循环后还要再加一个if判断。

if(last && p->next->val == last->val)
        p->next = p->next->next;
如果不加则【1,1,1,1,1】和【1,1,1,1】输出为【1】

但这是用了testcase才知道的,自己想不到。


另一种写法:

struct ListNode* deleteDuplicates(struct ListNode* head) {
    if(!head || !head->next)
        return head;
    struct ListNode *dummy = (struct ListNode*)malloc(sizeof(struct ListNode));
    dummy->next = head;
    struct ListNode *p = dummy;
    struct ListNode *curr = head;
    
    while(curr){
        if(curr->next && curr->val == curr->next->val){
            while(curr->next && curr->val == curr->next->val)
                curr = curr->next;
        }
        else{
            p->next = curr;
            p = p->next;
        }
        curr = curr->next;
    }
    p->next=NULL;
    return dummy->next;
}

更简洁的写法:

struct ListNode* deleteDuplicates(struct ListNode* head) {
    if(!head || !head->next)
        return head; 
    struct ListNode *dummy = (struct ListNode*)malloc(sizeof(struct ListNode)); 
    dummy->next = head;
    struct ListNode *pre = dummy, *cur = head;
    int preVal = head->val-1; //记录下当前节点的值以便下次循环对比使用,初始值应该对头节点产生影响,所以设成与头节点值有区别。
    while(cur){
        if(cur->val != preVal && ( !cur->next || cur->next->val != cur->val)) {//only when both the previous value and the next are not equal to the current one - by the way, the next node is null will definitely considered unequal, we can then collect it;
            pre->next = cur;
            pre = pre->next;
        }
        preVal = cur->val;
        cur = cur->next;
    }
    pre->next = NULL; //terminate the list;
    return dummy->next;
}


剑指offer57题:

一.返回类型为void

void DeleteNode(ListNode** pListHead, ListNode* pToBeDeleted)
{
    if(!pListHead || !pToBeDeleted)
        return;

    // 要删除的结点不是尾结点
    if(pToBeDeleted->m_pNext != NULL)
    {
        ListNode* pNext = pToBeDeleted->m_pNext;
        pToBeDeleted->m_nValue = pNext->m_nValue;
        pToBeDeleted->m_pNext = pNext->m_pNext;
 
        delete pNext;
        pNext = NULL;
    }
    // 链表只有一个结点,删除头结点(也是尾结点)
    else if(*pListHead == pToBeDeleted)
    {
        delete pToBeDeleted;
        pToBeDeleted = NULL;
        *pListHead = NULL;
    }
    // 链表中有多个结点,删除尾结点
    else
    {
        ListNode* pNode = *pListHead;
        while(pNode->m_pNext != pToBeDeleted)
        {
            pNode = pNode->m_pNext;            
        }
 
        pNode->m_pNext = NULL;
        delete pToBeDeleted;
        pToBeDeleted = NULL;
    }
}


二、返回类型是ListNode*

    ListNode* deleteDuplication(ListNode* pHead)
    {
        if (pHead == NULL) return NULL;
        
        ListNode *curr = pHead;
        ListNode *prev = NULL;
        ListNode *pNext;
        ListNode *newHead = pHead;
        
        while(curr){
            pNext = curr->next;
            int value = curr->val;
        	bool shouldDel = false;
            if(pNext != NULL && pNext->val == value)
                shouldDel = true;
            
            if(shouldDel){//要删除
                ListNode *pToBeDel = curr;
                while(pToBeDel != NULL && pToBeDel->val == value){
                    pNext = pToBeDel->next;
                    delete pToBeDel;
                    pToBeDel = NULL;
                    pToBeDel = pNext;
                }
                if(prev == NULL)//头结点改变
                    newHead = pNext;
                else
                    prev->next = pNext;
                
                curr = pNext;
            }
            else{//不要删除
                prev = curr;
                curr = curr->next;
            }   
        }
        return newHead;
    }








鼎捷T100二次开发实战:如何给开窗功能加上权限锁(附完整代码) 本文详细解析了鼎捷T100二次开发中开窗功能权限锁的实现方法,提供了两种技术方案:开窗程序重构法和动态WHERE条件注入法,并附上完整代码示例。通过真实案例,帮助开发者解决数据权限细粒度控制的难题,提升ERP系统的安全性和实用性。 阅读详情

相关推荐

io_uring vs epoll ,谁在网络编程领域更胜一筹?

简介:从定量分析的角度,通过量化 io_uring 和 epoll 两种编程框架下的相关操作的耗时,来分析二者的性能差异。 本文作者:王小光,「高性能存储技术SIG」核心成员。 背景 io_uring 在传统存储 io 场景已经证明其价值,但 io_uring 不仅支持传统存储 io,也支持网络 io。io_uring 社区有众多的开发者尝试将 io_uring 用于网络应用。我们之前也在《你认为 io_uring 只适用于存储 IO?大错特错!》中也探索过 io_uring 在网络场景的应用及其

阿里云云栖号 3035

删除链表中的重复节点

这里的删除是只要有重复就要全部删除,如1->2->2->3,删除之后就是1->3. #include #include struct ListNode { int val; struct ListNode *next; }; struct ListNode* deleteDuplicates(struct ListNode* head) { if(NULL==he

剑蝶ly的专栏 1282

U8采购入库单CO接口开发实战:加载、新增与删除操作详解

本文详细解析了用友U8采购入库单CO接口的开发实战,重点介绍了加载、新增与删除三大核心操作的实现方法。通过C#代码示例和实际项目经验,帮助开发者高效处理采购入库单,提升企业供应链管理效率。文章还涵盖了环境配置、异常处理、性能优化等关键技巧,适合U8二次开发人员参考。

weixin_33462927的博客 376

力扣算法题—082删除排序链表中的重复元素2

给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有重复出现的数字。 示例1: 输入: 1->2->3->3->4->4->5 输出: 1->2->5 示例2: 输入: 1->1->1->2->3 输出: 2->3 1 #include "_000库函数.h" 2 ...

weixin_33901843的博客 150

Star CCM+中衍生零部件下的阈值应用与区域内删除目标网格

同样的在绘制网格结束后,有时出现负体积网格或质量差的网格,为了节约时间成本,可能会选择将负体积的网格或质量差的网格删除。弹出相应的窗口,在窗口中选择相应的区域①,选择标量函数②(此处以网格体积变化为例),选择模型③,设置阈值④,选择No Dispalyer,会根据需求选择显示,最后点击Create⑥完成创建。此处以温度为例,若出现温度异常点,首先在①栏中勾选Function,然后在下面点击⑤Select,在弹出的Function窗口中选择温度场函数,再点击④Identify,查找温度异常网格数量。

2201_75375391的博客 2222

MCP详解:手把手教你理解和如何使用各种开源MCP服务

MCP 作为一种开放协议,为 AI 模型与外部世界的连接提供了标准化的解决方案。它不仅降低了开发门槛,还极大地扩展了 AI 应用的边界。无论是开发者还是普通用户,都可以通过 MCP 更高效地利用 AI 技术,实现更多智能化的功能。

王哥儿聊AI的博客 6056

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

82. 删除排序链表中的重复元素 II 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。 Example 1 输入: 1->2->3->3->4->4->5 输出: 1->2->5 Example 2 输入: 1->1->1->2->3 输出: 2->3 思路 由于考虑到了重复元...

紫藤&code的博客 368

Ollama+FAISS+Embedding+Rerank+LLM 详细部署指南

下载安装Ollama 双击运行安装程序 安装完成后会自动启动服务 修改默认安装路径(避免C盘爆满) 或使用PowerShell: 验证安装 Linux系统部署: (二)准备模型 1. 拉取Embedding模型 2. 拉取LLM模型 注意:原文中提到的可能需要从自定义仓库拉取: 3. 下载Rerank模型 (三)安装依赖库 创建项目目录和虚拟环境: 二、主要功能实现 项目结构 (一)配置文件(config/config.yaml) (二)文本分块策略实现 创建 : (三)文档读取

AI技术改变世界 1581

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

struct ListNode* deleteDuplicates(struct ListNode* head){ if(!head||!head->next) return head;//如果链表为空或者只有一个节点,返回head struct ListNode* Head=(struct ListNode*)malloc(sizeof(struct ListNode)),*p=head...

weixin_43784305的博客 182

Windows服务器SSL漏洞修复实战:如何一键禁用TLS 1.0/1.1避免SWEET32攻击

本文提供了Windows服务器修复SWEET32漏洞的实战指南。通过组策略编辑器,详细讲解如何一键禁用不安全的TLS 1.0/1.1协议,并优化密码套件顺序,以消除由3DES等弱加密算法带来的安全风险。文章还涵盖了应对SQL Server等应用兼容性挑战的解决方案,以及企业级批量部署的脚本化方法,帮助管理员系统性地提升服务器TLS/SSL安全配置。

weixin_29310631的博客 246

从零开始:IBM V3700控制器更换与机器代码升级全流程指南

本文详细介绍了IBM V3700存储系统控制器更换与机器代码升级的全流程指南。从前期准备、硬件更换到版本同步,逐步解析如何应对503错误等常见问题,确保系统稳定运行。通过实战案例和优化建议,帮助工程师高效完成维护任务,提升存储系统可用性。

weixin_28365523的博客 312

leetcode83题 题解 翻译 C语言版 Python版

83. Remove Duplicates from Sorted List Given a sorted linked list, delete all duplicates such that each element appear only once. For example, Given 1->1->2, return 1->2. Given 1->1->2->3->3

陈止风的博客 1586

OpenAI Realtime API实时语音交互实战指南

实时语音交互是人机自然对话的核心能力,其本质在于构建低延迟、双向、流式协同的音频-语义闭环。它突破传统REST API的请求-响应范式,依托WebSocket实现毫秒级音频输入流(audio.delta)、模型生成流(text/audio.delta)与动态控制流(session.update)三重并行。该技术显著降低端到端延迟至300ms以内,支撑语音助手、智能客服、对话式教育等强实时场景。本文聚焦OpenAI Realtime API的工程落地,详解PCM音频流处理、VAD语音活动检测、AudioCon

weixin_32285357的博客 393

【LeetCode】 82. Remove Duplicates from Sorted List II C语言

LeetCode解题心得,欢迎交流! 第三日  /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* deleteDuplicates(struct ListNode* head)

godlovelong的博客 620

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

删除排序链表中的重复元素 II给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。

1.struct ListNode* deleteDuplicates(struct ListNode* head) { if (!head) { return head; } struct ListNode* dummy = malloc(sizeof(struct ListNode)); dummy->next = head; struct ListNode* cur = dummy; while (cur->next &a...

knockkk的博客 683

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

leetcode

删除排序链表中的重复元素 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3->3 输出: 1->2->3’ /* Definition for singly-linked list. struct ListNode { int va...

weixin_43418481的博客 171

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

LeetCode 82-- 删除排序链表中的重复元素 II ( Remove Duplicates from Sorted List II ) ( C语言版 )

题目描述 :  代码如下 (附有解析 ): /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* deleteDuplicates(struct ListNode* hea...

【Dyson】的博客 372

【Leetcode 动态规划】 不知如何分类 就都放这里了

杂

Dr_Unknown的博客 2069

Leetcode ☞ 1. Two Sum ☆ 【Hashmap】

给一数组和一target数,有两个元素的和为target。求这两个元素的下标的和。

Dr_Unknown的博客 984

Leetcode ☞ 263. Ugly Number ☆ 【附求质数 prime number 最大公约gcd 最小公倍lcm】

判断一个数的因子是不是只有2、3、5。

Dr_Unknown的博客 978

数质数

数素数 令Pi表示第i个素数。现任给两个正整数M 4,请输出PM到PN的所有素数。 输入格式: 输入在一行中给出M和N,其间以空格分隔。 输出格式: 输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。 输入样例: 5 27 输出样例: 11 13 17 19 23 29 31 37 41 43 47 53 59 61

Dr_Unknown的博客 960

Leetcode ☞ 206. Reverse Linked List ☆

链表反转

Dr_Unknown的博客 855

Leetcode ☞ 203. Remove Linked List Elements ☆ 【dummy 方法二重点掌握】 【方法三双重指针】

给一个单链表和一value,删除掉值等于给定的value的节点,并返回。

Dr_Unknown的博客 776

Leetcode ☞ 234. Palindrome Linked List

234. Palindrome Linked ListMy SubmissionsQuestionTotal Accepted: 40299 Total Submissions: 147797 Difficulty: EasyGiven a singly linked list, determine if it is a palindrome.Follow up:Could you do it i...

Dr_Unknown的博客 770

Leetcode ☞ 35. Search Insert Position 【binary search 二分查找 模板】

给一有序数列和一target值。若target在数列中,返回序号;若不在,返回其应该插入的位置。

Dr_Unknown的博客 751

Leetcode ☞ 319. Bulb Switcher ☆ brain teaser

灯泡开关 脑筋急转弯一样的题=。=

Dr_Unknown的博客 721
上一篇: Leetcode ☞ 25. Reverse Nodes in k-Group
下一篇: Leetcode ☞ 61. Rotate List
Dr_Unknown
博客等级 码龄12年 13粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值