链表_LeetCode_链表相交

原题:给定两个(单向)链表,判定它们是否相交并返回交点。请注意相交的定义基于节点的引用,而不是基于节点的值。换句话说,如果一个链表的第k个节点与另一个链表的第j个节点是同一节点(引用完全相同),则这两个链表相交。

法一:消除长度差

struct ListNode getIntersectionNode(struct ListNode headA, struct ListNode headB) {

        struct ListNode pa = headA;
        struct ListNode pb = headB;
        while (pa != pb) {
            if (pa != NULL) {
                pa = pa->next;
            }else{
                pa = headB;
            }
            if (pb != NULL) {
                pb = pb->next;
            }else{
                pb = headA;
            }
        }
        if (pa ==NULL) {
            return NULL;
        }
        return pa;
    }

思路相同的做法还有:

(1)遍历得出两个链表的长度,从而算出长度差c,让较长链表先移动c个节点后,两链表再同时移动。

(2)将两链表A,B串连,得到链表A->B和B->A,然后同时遍历A->B和B->A。

posted @ 2020-03-26 14:04  Ruanzy  阅读(150)  评论(0)    收藏  举报