LeetCode-160.相交链表

160. 相交链表[1]

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交

image.png

image.png

方法一:哈希表法

//相交链表哈希表法
ListNode* getIntersectionNode(ListNode* headA, ListNode* headB)
{
    if (headA == NULL || headB == NULL) return NULL;
    unordered_set<ListNode*> st;
    //1:首先把headA插入st容器中
    while (headA != NULL)
    {
        st.insert(headA);
        headA = headA->next;
    }
    //2:判断headB当前值是否在容器中
    while (headB!=NULL)
    {
        if (st.count(headB)) return headB;
        headB = headB->next;
    }
    return nullptr;
}

方法二:环形查找

image.png

image.png

1:假如有相交的点 A走到C的距离是:a+c+b:2+2+3 B走到C的距离是:b+c+a:3+2+2 2:假如没有相交的点 那么A与B走的距离都是:a+b 3:当A等于B时候返回,或者都为null时候跳出循环

//取环形链表的方法
ListNode* getIntersectionNode1(ListNode* headA, ListNode* headB)
{
    if (headA == NULL || headB == NULL) return NULL;
    ListNode* tempa = headA;
    ListNode* tempb = headB;
    while (tempa != tempb)  //只有找到相等或者找不到都为null时候跳出循环
    {
        tempa = tempa != nullptr ? tempa->next : headB;
        tempb = tempb != nullptr ? tempb->next : headA;
    }
    return tempa; //返回tempa或者tempb都可以
}

最新原创的文章都先发布在公众号,欢迎关注哦~, 扫描下方二维码回复「资料」可以获得我汇总整理的计算机学习资料

扫码_搜索联合传播样式-标准色版.png

扫码_搜索联合传播样式-标准色版.png

引用链接

[1] 160. 相交链表: https://leetcode.cn/problems/intersection-of-two-linked-lists/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值