判断两个链表是否相交

首先求出两个链表的长度 

 然后就要找到长长链表,让长链表先走,最后两个链表一起走

 最后有一个注意事项就是当两个链表一起走判断后面的交点的时候是根据地址判断,不是根据值判断,举例如下

完整的代码如下:

 

ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        int len1=0;
        int len2=0;
        ListNode*cur1=headA;
        ListNode*cur2=headB;
        while(cur1)
        {
            len1++;//求第一个链表的长度
            cur1=cur1->next;
        }
        while(cur2)
        {
            len2++;//求第二个链表的长度
            cur2=cur2->next;
        }
        int road=abs(len1-len2);//求两个链表的长度差
      ListNode*longlist;//表示长链表
      ListNode*shortlist;//表示短链表
      if(len1>len2)//根据两个链表的长度来找到长链表
      {
          longlist=headA;
          shortlist=headB;
      }
      else
      {
          longlist=headB;
          shortlist=headA;
      }
      while(road--)//上面已经找到了长链表,此处让长链表先走
      {
          longlist=longlist->next;
      }
      while(longlist&&shortlist&&(longlist!=shortlist))//两个链表一起走,当两个链表的节点相等或者有一个已经走完了则退出循环
      {
          longlist=longlist->next;
          shortlist=shortlist->next;
      }
       return longlist; //最后返回交点或NULL
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值