博客
关于我
链表13-删除链表中重复的结点
阅读量:137 次
发布时间:2019-02-27

本文共 988 字,大约阅读时间需要 3 分钟。

为了解决这个问题,我们需要删除一个排序链表中重复的节点,保留一个。我们可以使用递归的方法来简化逻辑,确保每个重复节点只保留一个。

方法思路

递归方法的思路是比较当前节点和前一个节点的值。如果当前节点的值与前一个节点的值相同,则递归删除当前节点;否则,返回当前节点作为结果。这种方法确保了每次处理都是基于前一个节点的状态,从而避免了处理链表结构复杂性的问题。

解决代码

class Solution {public:    ListNode* deleteDuplication(ListNode* pHead) {        if (pHead == nullptr || pHead->next == nullptr) {            return pHead;        }        return deleteDuplicationHelper(pHead, nullptr);    }    ListNode* deleteDuplicationHelper(ListNode* cur, ListNode* prev) {        if (cur == nullptr) {            return prev;        }        if (prev != nullptr && prev->val == cur->val) {            return deleteDuplicationHelper(cur->next, prev);        } else {            return deleteDuplicationHelper(cur->next, cur);        }    }};

代码解释

  • 递归函数deleteDuplicationHelper(ListNode* cur, ListNode* prev) 用于处理当前节点和前一个节点。
  • 基本情况:如果当前节点为空,返回前一个节点。
  • 比较节点值:如果前一个节点不为空且值与当前节点相同,递归处理下一个节点。
  • 递归删除:如果当前节点与前一个节点不同,递归处理下一个节点,并将当前节点加入结果链表。
  • 这种方法确保了每个重复节点只保留一个,时间复杂度为 O(n),空间复杂度为 O(1),适用于链表长度较长的情况。

    转载地址:http://qibb.baihongyu.com/

    你可能感兴趣的文章
    memcached高速缓存学习笔记001---memcached介绍和安装以及基本使用
    查看>>
    memcached高速缓存学习笔记003---利用JAVA程序操作memcached crud操作
    查看>>
    Memcached:Node.js 高性能缓存解决方案
    查看>>
    memcache、redis原理对比
    查看>>
    memset初始化高维数组为-1/0
    查看>>
    Metasploit CGI网关接口渗透测试实战
    查看>>
    Metasploit Web服务器渗透测试实战
    查看>>
    Moment.js常见用法总结
    查看>>
    MongoDB出现Error parsing command line: unrecognised option ‘--fork‘ 的解决方法
    查看>>
    MongoDB学习笔记(8)--索引及优化索引
    查看>>
    ms sql server 2008 sp2更新异常
    查看>>
    MS UC 2013-0-Prepare Tool
    查看>>
    msbuild发布web应用程序
    查看>>
    MSCRM调用外部JS文件
    查看>>
    MSEdgeDriver (Chromium) 不适用于版本 >= 79.0.313 (Canary)
    查看>>
    msf
    查看>>
    MSSQL数据库查询优化(一)
    查看>>
    MSSQL日期格式转换函数(使用CONVERT)
    查看>>
    MSTP多生成树协议(第二课)
    查看>>
    MSTP是什么?有哪些专有名词?
    查看>>