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

单链表去重函数在尾部重复元素测试用例中报错,求排查

单链表去重函数错误排查

你的removeDuplicates函数在处理尾部重复元素时出错,主要有两个核心问题:

  • 删除节点后错误地移动temp指针:每次删除重复节点后,你立即将temp移到下一个节点,导致跳过了对新的temp->next节点的检查(该节点可能仍是当前curr的重复项)。例如链表2->2->2中,删除第二个2后,temp直接跳到第三个2,无法再检查它是否与第一个2重复。
  • 冗余的空指针检查:内层循环的temp!=NULL判断是多余的,因为内层循环条件temp->next!=NULL已经保证了temp不为空。

修复后的代码

SinglyLinkedListNode* removeDuplicates(SinglyLinkedListNode* llist)
{
    if(llist == NULL)
        return NULL;
    
    SinglyLinkedListNode* curr = llist;
    // 修改外层循环条件,确保处理所有节点(即使是最后一个)
    while(curr != NULL)
    {
        SinglyLinkedListNode* temp = curr;
        while(temp->next != NULL)
        {
            // 移除冗余的temp!=NULL检查
            if(temp->next->data == curr->data)
            {
                SinglyLinkedListNode* nodetodelete = temp->next;
                temp->next = temp->next->next;
                delete(nodetodelete);
                // 删除节点后不移动temp,继续检查新的next节点
            }
            else
            {
                // 仅当未删除节点时才移动temp
                temp = temp->next;
            }
        }
        curr = curr->next;
    }
    return llist;
}

关键修复点说明

  1. 调整temp指针的移动逻辑:只有当未删除节点时才将temp向后移动,删除节点后保持temp不动,以便检查新的temp->next是否仍为重复项。
  2. 简化外层循环条件:将curr!=NULL && curr->next!=NULL改为curr!=NULL,确保遍历所有节点(即使是最后一个,此时内层循环不会执行,无副作用)。
  3. 移除冗余检查:删除temp!=NULL判断,优化代码逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 09:48:16