《手撕链表题系列-8》相交链表

简介: 本系列主要讲解链表的经典题注:划重点!!必考~

前言


本系列主要讲解链表的经典题

注:划重点!!必考~


链表分割


力扣链接:160. 相交链表 - 力扣(LeetCode) (leetcode-cn.com)


  • 题目描述:


给你两个单链表的头节点 headAheadB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null


示例:

39.png

提示:

listA 中节点数目为 m

listB 中节点数目为 n

0 <= m, n <= 3 * 104

1 <= Node.val <= 105

0 <= skipA <= m

0 <= skipB <= n

如果 listA 和 listB 没有交点,intersectVal 为 0

如果 listA 和 listB 有交点,intersectVal == listA[skipA + 1] == listB[skipB + 1]


解题思路:


  1. 对两个链表进行分别遍历算出长度差
  2. 同时如果两链表末尾结点地址不同,则表示没有两链表没有相交
  3. 对长链表指针先走长度差个结点,再两个指针同时遍历
  4. 当两个结点指针相遇时即为相交节点


参考代码:


/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
    //创建寻址指针
    struct ListNode*cur1=headA,*cur2=headB;
    //计算各链表的长度
    int len1=1,len2=1,gas;
    while(cur1->next)
    {
        len1++;
        cur1=cur1->next;
    }
    while(cur2->next)
    {
        len2++;
        cur2=cur2->next;
    }
    //各链表尾节点不相等则两链表不相交
    if(cur1!=cur2)
    return false;
    //接下来则是必定有相交节点的情况
    //判断长短并记录
    struct ListNode*geater,*less;
    if(len1>=len2)
    {
        geater=headA;
        less=headB;
        gas=len1-len2;
    }
    else
    {
        geater=headB;
        less=headA;
        gas=len2-len1;
    }
    //长链表先走差距长度
    while(gas--)
    {
        geater=geater->next;
    }
    //一同走,相等时则找到相交节点
    while(geater!=less)
    {
        geater=geater->next;
        less=less->next;
    }
    return geater;
}


结果:

40.png

每日k题无烦恼,点赞学习不得了~

相关文章
|
8月前
|
索引
【力扣刷题】两数求和、移动零、相交链表、反转链表
【力扣刷题】两数求和、移动零、相交链表、反转链表
56 2
【力扣刷题】两数求和、移动零、相交链表、反转链表
|
3月前
|
算法
❤️算法笔记❤️-(每日一刷-160、相交链表)
❤️算法笔记❤️-(每日一刷-160、相交链表)
23 1
|
3月前
【数据结构】环形、相交、回文、分割、合并、反转链表
【数据结构】环形、相交、回文、分割、合并、反转链表
32 0
|
6月前
【数据结构OJ题】相交链表
力扣题目——相交链表
39 1
【数据结构OJ题】相交链表
|
5月前
|
算法 Python
【Leetcode刷题Python】106.相交链表
采用双指针法来找出两个链表的相交起始节点,并详细解释了算法的时间和空间复杂度。
36 1
|
5月前
|
机器学习/深度学习
【刷题记录】相交链表
【刷题记录】相交链表
|
7月前
|
存储 算法 数据可视化
深入解析力扣160题:相交链表的解决方法(哈希表法与双指针法详细图解)
深入解析力扣160题:相交链表的解决方法(哈希表法与双指针法详细图解)
|
7月前
|
算法 C语言
【数据结构与算法 经典例题】相交链表求交点
【数据结构与算法 经典例题】相交链表求交点
|
8月前
|
C++
[leetcode 链表] 反转链表 vs 链表相交
[leetcode 链表] 反转链表 vs 链表相交

热门文章

最新文章

下一篇
开通oss服务