现在有两个无环单链表,若两个链表的长度分别为m和n,请设计一个时间复杂度为O(n + m),额外空间复杂度为O(1)的算法,判断这两个链表是否相交。
给定两个链表的头结点headA和headB,请返回一个bool值,代表这两个链表是否相交。保证两个链表长度小于等于500。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};*/
class CheckIntersect {
public:
int getLen(ListNode* p)
{
int count=0;
while(p)
{
count++;
p=p->next;
}
return count;
}
bool chkIntersect(ListNode* headA, ListNode* headB) {
// write code here
int lena=getLen(headA);
int lenb=getLen(headB);
if(lena>lenb)
{
for(int i=0;i<lena-lenb;i++)
headA=headA->next;
while(headA)
{
if(headA==headB)
return true;
headA=headA->next;
headB=headB->next;
}
}
else
{
for(int i=0;i<lenb-lena;i++)
headB=headB->next;
while(headA)
{
if(headA==headB)
return true;
headA=headA->next;
headB=headB->next;
}
}
return false;
}
};