相交链表

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。

图示两个链表在节点 c1 开始相交:

 

题目数据 保证 整个链式结构中不存在环。

注意,函数返回结果后,链表必须 保持其原始结构 。

 

/**
 * 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) {
        //先计算链表长度
        int LenA = 0;
        ListNode *p = headA;
        while(p){
            LenA++;
            p = p->next;
        }
        int LenB = 0;
        ListNode *q = headB;
        while(q){
            LenB++;
            q = q->next;
        }
        //重置指针
        p = headA;
        q = headB;
        //较长的链表先移动指针
        int len = max(LenA,LenB)-min(LenA,LenB);
        if(LenA>LenB){
            while(len--){
                p=p->next;
            }
        }else{
            while(len--){
                q=q->next;
            }
        }
        //同时移动两个指针
        while(p&&q){
            if(p==q){
                return p;
            }
            p=p->next;
            q=q->next;
        }
        return NULL;
    }
};

 

posted on 2024-12-20 22:47  _月生  阅读(18)  评论(0)    收藏  举报