相交链表

题目 相交链表

编写一个程序,找到两个单链表相交的起始节点。
例子:

思路

假设链表A的 4->1 这部分为 a , 8->4->5的这部分为 c A=a+c
假设链表B的 5->0->1 这部分为 b , 8->4->5的这部分为 c B=b+c
tip:即公共的部分为c

那么现在在A的后面添加一条和B一样的链,在B后面添加一条和A一样的链
A=(a+c) + (b+c) ; b=(b+c) + (a+c);
即A=(a+c+b)+c ;B=(b+c+a)+c;
聪明的你发现了吧,前面部分(a+c+b==b+c+a)是长度相同的,那么这道题就容易解决了,即第一个相同的点就是第一个交点

代码

    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        //A遍历完了给他接上B的,B遍历完第一次给他接上A的,当第一次相等的时候,就是交点
        if(headA==null||headB==null)
            return null;
        ListNode node1 = headA;
        ListNode node2 = headB;
        while(node1!=node2){
            if(node1==null){
                node1=headB;
            }else{
                node1=node1.next;
            }
            if(node2==null){
                node2=headA;
            }else{
                node2=node2.next;
            }
        }
        return node2;
    }
原文地址:https://www.cnblogs.com/bendandedaima/p/13401629.html