You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

有序链表去重代码问题:首个重复元素未正确移除求助

有序链表重复节点删除问题解决

我来帮你搞定这个问题——看你的描述,输入1->1->2->2->3->3后返回了1->1->2->3,明显是头节点的重复对没处理好,你的代码踩了两个常见的小坑,咱们一步步梳理:

问题出在哪?

从你给出的代码片段来看,核心问题有两个:

  • 初始化逻辑错误:你写了Node* Current = &head;,如果head是链表头指针(通常是Node*类型),这会让Current变成「指向指针的指针」,后续访问Current->next的逻辑完全混乱,直接导致头节点的重复判断失效。
  • 变量名拼写失误:你代码里的Current->next->info == Cur...明显是没写完(应该是Current->info),这会让内层循环的判断条件不成立,根本不会触发重复节点的删除,所以头两个1就被保留下来了。

另外,如果你的函数参数是Node head(值传递),还会导致链表头的修改无法同步到外部,这也是容易忽略的坑。

修正后的可运行代码

下面是帮你调整好的代码,加了详细注释,直接就能用:

// 用指针的引用做参数,确保外部能拿到修改后的链表头
void removeDuplicates(Node* &head) {
    // 空链表或只有一个节点,直接返回
    if (head == nullptr || head->next == nullptr) {
        return;
    }

    Node* current = head;
    while (current != nullptr && current->next != nullptr) {
        // 发现当前节点和下一个节点值重复
        if (current->info == current->next->info) {
            Node* duplicate = current->next;
            // 遍历删除所有和当前节点值相同的后续节点
            while (duplicate != nullptr && duplicate->info == current->info) {
                Node* temp = duplicate;
                duplicate = duplicate->next;
                delete temp; // 记得释放内存,避免泄漏
            }
            // 把当前节点的next指向第一个不重复的节点
            current->next = duplicate;
        } else {
            // 值不重复,直接移动到下一个节点
            current = current->next;
        }
    }
}

代码逻辑说明

  • 指针引用参数:Node* &head这个写法很关键,能确保我们在函数里修改链表结构(比如头节点本身需要调整的场景)时,外部调用方能同步拿到修改后的结果。
  • 批量删除重复节点:内层循环会一次性把所有连续的重复节点都删掉,比如遇到1->1->1会直接处理成1,效率更高。
  • 内存安全:每次删除节点后用delete释放内存,避免内存泄漏问题。

用这个代码测试你的输入1->1->2->2->3->3,就能得到预期的1->2->3了。

更简洁的实现思路

如果你喜欢更紧凑的代码,也可以用这个版本,逻辑本质一样:

void removeDuplicates(Node* &head) {
    Node* current = head;
    while (current != nullptr) {
        Node* next_node = current->next;
        // 删掉所有和current值相同的后续节点
        while (next_node != nullptr && next_node->info == current->info) {
            Node* temp = next_node;
            next_node = next_node->next;
            delete temp;
        }
        current->next = next_node;
        current = next_node;
    }
}

内容的提问来源于stack exchange,提问作者Aaron Imani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:44:18