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个