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

本文共 1006 字,大约阅读时间需要 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/

    你可能感兴趣的文章
    nullnullHuge Pages
    查看>>
    NullPointerException Cannot invoke setSkipOutputConversion(boolean) because functionToInvoke is null
    查看>>
    null可以转换成任意非基本类型(int/short/long/float/boolean/byte/double/char以外)
    查看>>
    Number Sequence(kmp算法)
    查看>>
    Numix Core 开源项目教程
    查看>>
    numpy
    查看>>
    Numpy 入门
    查看>>
    NumPy 库详细介绍-ChatGPT4o作答
    查看>>
    NumPy 或 Pandas:将数组类型保持为整数,同时具有 NaN 值
    查看>>
    numpy 或 scipy 有哪些可能的计算可以返回 NaN?
    查看>>
    numpy 数组 dtype 在 Windows 10 64 位机器中默认为 int32
    查看>>
    numpy 数组与矩阵的乘法理解
    查看>>
    NumPy 数组拼接方法-ChatGPT4o作答
    查看>>
    numpy 用法
    查看>>
    Numpy 科学计算库详解
    查看>>
    Numpy.fft.fft和numpy.fft.fftfreq有什么不同
    查看>>
    numpy.linalg.norm(求范数)
    查看>>
    Numpy.ndarray对象不可调用
    查看>>
    Numpy.VisibleDeproationWarning:从不整齐的嵌套序列创建ndarray
    查看>>
    Numpy:按多个条件过滤行?
    查看>>