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

C++链表去重代码遇末尾重复元素无输出问题求解

单链表重复元素移除代码无输出问题排查与修复

问题原因

  • 外层循环逻辑存在空指针访问漏洞:原代码外层循环判断写为while(ptr->next!=NULL && ptr!=NULL),C++中逻辑与&&为短路求值规则,会先执行左侧的ptr->next!=NULL判断。当链表所有元素重复(如测试用例1 1 1 1),第一轮内层循环删除完所有后续重复节点后,ptr会移动到NULL,下一轮循环直接访问ptr->next触发空指针异常,程序直接崩溃终止,因此不会输出后续结果。
  • 边界处理缺失:当链表仅剩最后一个节点时,原判断逻辑的执行顺序也可能引发遍历异常。

修复方案

仅需调整removeDuplicates函数外层循环的判断顺序,利用短路求值规则先判断ptr是否为空,再访问其成员变量即可:

void removeDuplicates(Node* head){  
    Node *ptr,*ptr2,*temp;
    ptr=head;
    // 调整判断顺序,先判定ptr非空再访问ptr->next
    while(ptr != NULL && ptr->next != NULL){
        ptr2=ptr;
        while(ptr2->next!=NULL){
            if(ptr2->next->data==ptr->data){
                temp=ptr2->next;
                ptr2->next=temp->next; 
                temp->next=NULL;
                delete(temp);
            }
            else ptr2=ptr2->next;   
        }
        ptr=ptr->next;
    } 
}

修复后可正常覆盖所有测试用例:

  • 输入1 1 1 1,输出结果为1
  • 输入2 1 1 2 1,输出结果为2 1
  • 原有正常用例不受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:09:03