链表相交

 题目:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 

需要注意的点:

1、定义的两个指针在遍历完链表的长度后,要重新指向头结点

2、让长、短链表的尾端对齐

3、相交意味着指针相同

 

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        ListNode* curA=headA;
        ListNode* curB=headB;
        int lenA=0;
        int lenB=0;

        while(curA!=NULL)//计算链表的长度
        {
            lenA++;
            curA=curA->next;
        }

        while(curB!=NULL)
        {
            lenB++;
            curB=curB->next;
        }

        curA=headA;//重新指向头结点
        curB=headB;

        if(lenA<lenB)//保证最大的链表为curA,方便后续处理
        {
            swap(lenA,lenB);
            swap(curA,curB);
        }
        int gap=lenA-lenB;
        while(gap--)//让curA移动到,和curB 末尾对齐的位置
        {
            curA=curA->next;
        }

        while(curA!=NULL)//找出指针相同的点
        {
            if(curA==curB)
            {
                return curA;
            }

            curA=curA->next;
            curB=curB->next;
        }

        return NULL;


        

    }
};

 

posted @ 2023-04-26 21:20  该说不唠  阅读(56)  评论(0)    收藏  举报