首页 > 其他 > 详细

LeetCode 面试题02.07. 链表相交

时间:2020-07-08 18:35:31      阅读:50      评论:0      收藏:0      [点我收藏+]

思路描述:首先如果两个链表相交,则它们第一个交点之后的节点必然相交,即从首个交点之后两链表就重合了,原因为每个节点只能指向一个节点,因此相交形状一定为Y型不可能为X。

对于此题如果仅判断是否相交,我们可以之间遍历到最后一个节点,判断是否相同,相同相交,否则为不相交。但此题要求返回相交的首个节点,因此可以首先求出两个链表的长度差,让长的链表

先开始前进到两链表长度相等,然后开始双方同步遍历,寻找是否存在相同节点,此时找到的第一个节点即为相交的第一个节点。

具体LeetCode代码如下:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        ListNode *hA=headA;
        ListNode *hB=headB;
        int l1=0,l2=0;
        while(hA){
            l1++;
            hA=hA->next;
        }
        while(hB){
            l2++;
            hB=hB->next;
        }
        int sub;
        if(l1>l2){
            sub=l1-l2;
            while(sub){
                headA=headA->next;
                sub--;
            }
        }
        else{
            sub=l2-l1;
            while(sub){
                headB=headB->next;
                sub--;
            }
        }
        while(headA){
            if(headA==headB){
                return headA;
            }
            headA=headA->next;
          
            headB=headB->next;
        }
        return NULL;
    }
};

 

LeetCode 面试题02.07. 链表相交

原文:https://www.cnblogs.com/zzw-/p/13268270.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!