博客
关于我
链表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/

    你可能感兴趣的文章
    Mysql 表分区
    查看>>
    mysql 表的操作
    查看>>
    mysql 视图,视图更新删除
    查看>>
    MySQL 触发器
    查看>>
    mysql 让所有IP访问数据库
    查看>>
    mysql 记录的增删改查
    查看>>
    MySQL 设置数据库的隔离级别
    查看>>
    MySQL 证明为什么用limit时,offset很大会影响性能
    查看>>
    Mysql 语句操作索引SQL语句
    查看>>
    MySQL 误操作后数据恢复(update,delete忘加where条件)
    查看>>
    MySQL 调优/优化的 101 个建议!
    查看>>
    mysql 转义字符用法_MySql 转义字符的使用说明
    查看>>
    mysql 输入密码秒退
    查看>>
    mysql 递归查找父节点_MySQL递归查询树状表的子节点、父节点具体实现
    查看>>
    mysql 里对root及普通用户赋权及更改密码的一些命令
    查看>>
    Mysql 重置自增列的开始序号
    查看>>
    MySQL 高可用性之keepalived+mysql双主
    查看>>
    mysql-connector-java各种版本下载地址
    查看>>
    mysql-group_concat
    查看>>
    MySQL-【4】基本操作
    查看>>