①双指针工作原理
1.动画引入
链表相交(快慢双指针思路)
2.双指针工作原理
Ⅰ:fast指向长链表
Ⅱ:fast指针先走
Ⅲ:目的是让slow和fast可以指向同一块数据!(如果相交)
3.时间复杂度
一趟for循环解决问题,时间复杂度O(n)
②代码实现
我的代码实现的冗余很多,可以进行优化的!这就交给大家自己优化,这是道简单题
class Solution {
public:
ListNode* getIntersectionNode(ListNode* headA, ListNode* headB)
{
int LenA = 0;
int LenB = 0;
for(ListNode* traversal = headA;traversal;traversal=traversal->next){
LenA++;
}
for(ListNode* traversal = headB;traversal;traversal=traversal->next){
LenB++;
}
if(LenA>=LenB){//fast指针作用A链表
int distance = LenA - LenB;
ListNode* fast = headA;
ListNode* slow = headB;
while(distance--)
{
fast = fast->next;
}
while(fast){
if(fast==slow)return fast;
fast = fast->next;
slow = slow->next;
}
}
else {//fast指针作用B链表
int distance = LenB - LenA;
ListNode* fast = headB;
ListNode* slow = headA;
while(distance--)
{
fast = fast->next;
}
while(fast){
if(fast==slow)return fast;
fast = fast->next;
slow = slow->next;
}
}
return NULL;
}
};