struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
struct ListNode* pf = headA;
struct ListNode* pd;
struct ListNode* str;
int i = 0;
while( pf != NULL )
{
for( pd = headB ; pd != NULL ; pd = pd->next )
{
if( pf == pd )
{
for( str = pf ; pd != NULL ; pd = pd->next , str = str->next )
{
if( str == pd )
{
;
}
else
goto end;
}
if( str == NULL )
return pd;
}
end:
}
pf = pf->next;
}
return NULL;
}
由于使用了三层循环嵌套:导致时间复杂度O(n^3)过高
改进:
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
struct ListNode *a = headA;
struct ListNode *b = headB;
struct ListNode *shortnode;
struct ListNode *longnode;
int len_a = 1;
int len_b = 1;
int i = 0;
while( a->next != NULL )
{
a = a->next;
len_a++;
}
while( b->next != NULL )
{
b = b->next;
len_b++;
}
if( a == b )
{
if( len_a > len_b )
{
shortnode = headB;
longnode = headA;
}
else
{
shortnode = headA;
longnode = headB;
}
for( i = 0 ; i < abs(len_a-len_b) ; i++)
{
longnode = longnode->nest;
}
while( longnode != shortnode )
{
longnode = longnode->next;
shortnode = shortnode->next;
}
return longnode;
}
else
{
return NULL;
}
}
时间复杂度:O(n);