每日一題——連結串列相交問題
阿新 • • 發佈:2019-02-07
1>判斷兩個連結串列是否相交,若相交,求交點(連結串列不帶環)
2>判斷兩個連結串列是否相交,若相交,求交點(連結串列可能帶環)
//連結串列不帶環
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
// write your code here
if(headA ==NULL || headB == NULL)
return NULL;
int lenA = 0;
int lenB = 0;
ListNode* A = headA;
ListNode* B = headB;
while (A)
{
lenA++;
A = A->next;
}
while(B)
{
lenB++;
B = B->next;
}
ListNode* curA = headA;
ListNode* curB = headB;
if(lenA > lenB)
{
int len = lenA - lenB;
while (len--)
{
curA = curA->next;
}
}
else if(lenA < lenB)
{
int len = lenB - lenA;
while(len--)
{
curB = curB->next;
}
}
else
{}
while(curA->val != curB->val)
{
curA = curA->next ;
curB = curB->next;
}
return curA;
}
帶環連結串列可能相交分為兩種情況:1,一個帶環,一個不帶環;
2,兩個都帶環(該環必須共享,才能保證相交)。
解題思路:
1,先判斷兩個連結串列是否帶環;
2,分3種情況
若一個有環,一個無環,肯定不相交;
兩個都有環;若要相交,環必須是共享的。即若相交,交叉點肯定在起始點與環入口之間。
兩個都沒環。(就是第一個問題)
附加題:
輸出了6個‘-’(在Linux上驗證)
第一次fork,共兩個程序,輸出兩個
第二次fork,共四個程序,輸出四個
共6個