数据结构:判断两个单链表是否相交


categories:

  • 数据结构

题目要求

判断两个单链表是否相交,如果相交则返回第一个相交的节点,如果没有相交则返回NULL

算法

1、先求两个链表长度的差值,让长的链表指针先走这个差值,如下图让plist1先走到p位置
在这里插入图片描述
2、完成步骤1后,让两个链表的指针同步向后走,每走一步判断两个节点是否相等,如果相等则直接返回这个节点,如果走到NULL,则两个链表不相交

C代码

LinkList IsIntersect(LinkList plist1, Linklist plist2)
{
    if (plist1 == NULL || plist2 == NULL)
    {
        return NULL;
    }
    if (ListEmpty(plist1) || ListEmpty(plist2))//空链表
    {
        return NULL;
    }

    int len1 = GetLength(plist1);
    int len2 = GetLength(plist2);
    LinkList p = plist1, q = plist2;

    if (len1 > len2)// 长链表走差值
    {
        for (int i = 0; i < len1 - len2; i++)
        {
            p = p->next;
        }
    }
    else
    {
        for (int i = 0; i < len2 - len1; i++)
        {
            q = q->next;
        }
    }

    while (p != NULL)//两个指针同步走
    {
        p = p->next;
        q = q->next;
        if (p == q)
        {
            return p;
        }
    }
    return NULL;
}
全部评论

相关推荐

offer多多的六边形战士很无语:看了你的博客,感觉挺不错的,可以把你的访问量和粉丝数在简历里提一下,闪光点(仅个人意见)
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务