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

Y型单链表交点求解代码输出异常,请求排查错误原因

单链表交点求解代码错误排查

给定两个长度分别为N和M的单链表,编写程序求解它们的交点。输入示例对应的链表结构为:链表1是1→2→10→15→30,链表2是6→9→10→15→30,正确输出应为15,但我的代码输出为10。以下是我的代码,请帮忙找出错误所在:

int intersectPoint(Node* head1, Node* head2)
{
    unordered_set<Node*> list1;
    int output;
    while(head1->next!=NULL){
        list1.insert(head1);
        head1=head1->next;
    }
    while(list1.find(head2)!=list1.end()){
        head2=head2->next;
    }
    output=head2->data;
    return output;
}

错误点分析

  • 节点遗漏问题:第一个循环用head1->next!=NULL作为终止条件,会漏掉链表的最后一个节点。比如示例中的10节点会被存入集合,但15、30不会被加入,导致后续判断出错。正确的循环条件应该是while(head1!=NULL),确保所有节点都被存入哈希集合。
  • 循环逻辑颠倒:第二个循环的逻辑完全错误,当前代码是当head2存在于集合中时就向后移动,这会跳过交点本身。正确逻辑应该是:当head2不在集合中时才向后移动,直到找到第一个存在于集合中的节点,这个节点就是两个链表的交点。
  • 空指针风险:如果两个链表没有交点,head2最终会走到NULL,此时直接访问head2->data会触发空指针异常,需要先判断head2是否为空。

修正后的代码示例

int intersectPoint(Node* head1, Node* head2)
{
    unordered_set<Node*> list1;
    // 遍历第一个链表,存入所有节点
    while(head1 != NULL){
        list1.insert(head1);
        head1 = head1->next;
    }
    // 遍历第二个链表,找第一个在集合中的节点
    while(head2 != NULL && list1.find(head2) == list1.end()){
        head2 = head2->next;
    }
    // 存在交点则返回data,无交点按题目要求返回-1
    return head2 != NULL ? head2->data : -1;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:35:26