Leetcode-相交链表

33.相交链表

题目内容:

代码及思路:

利用双指针的方法,两个一快一慢的指针进行遍历,如果有交点则第一个交点就是我们需要的节点。因此需要完成以下几步:

1.判断长度:

   1)对于长度较长的那个链表,用快一点的指针 (先走两者长度差值的步长)

   2)对于长度较短的那个链表,赋予较慢的指针

这样在遍历过程中,如果有交点则一定会相遇,否则则无交点.

/**
 * 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) {
        if(headA==nullptr||headB==nullptr)
            return nullptr;
        int lengthA=0;
        int lengthB=0;
        ListNode* p1=headA;
        ListNode* p2=headB;
        while(p1!=nullptr)
        {
            p1=p1->next;
            lengthA++;
        }
        while(p2!=nullptr)
        {
            p2=p2->next;
            lengthB++;
        }
        if(p1!=p2) return nullptr;
        if(lengthA>lengthB)
        {
            for(int i=0;i<lengthA-lengthB;i++)
                headA=headA->next;
        }
        else if(lengthB==lengthA)
        {
            headA=headA;
            headB=headB;
        }
        else
        {
            for(int i=0;i<lengthB-lengthA;i++)
                headB=headB->next;
        }
        while(headA!=headB)
        {
            headA=headA->next;
            headB=headB->next;
        }
        return headA;
    }
};

猜你喜欢

转载自blog.csdn.net/larklili/article/details/89395133