【LeetCode160】相交链表(找相交的起始点)

1.题目

【LeetCode160】相交链表(找相交的起始点)_第1张图片

2.思路

408原题。
a指针在A链表开头遍历,到达结尾时,a指针跑到B链表头开始遍历。b指针同理。
【LeetCode160】相交链表(找相交的起始点)_第2张图片
根据 S 1 + S 3 + S 2 S1+S3+S2 S1+S3+S2 S 2 + S 3 + S 1 S2+S3+S1 S2+S3+S1相等,即遍历完这三坨后会刚好到达交点(如果相交的话);而如果不相交则最后结束的相同指针为NULL。

特殊情况下,S1和S2等长,那么还没遍历完一条链表就能找到交点了。

3.代码

/**
 * 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* a=heada;
        ListNode* b=headb;
        while(a!=b){
     
            if(a==NULL){
     
                a=headb;
            }else{
     
                a=a->next;
            }
            if(b==NULL){
     
                b=heada;
            }else{
     
                b=b->next;
            }
        }
        return a;
    }
};

你可能感兴趣的:(#,链表,LeetCode)