链表题
Write a program to find the node at which the intersection of two singly linked lists begins.
For example, the following two linked lists:
A: a1 → a2
↘
c1 → c2 → c3
↗
B: b1 → b2 → b3
begin to intersect at node c1.
思路:
先比较两者的长度,再让更长的链表先走两者的差值步,让两者在相对应的位置,两者每次都走一步,然后进行比较即可
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
if(headA == NULL || headB == NULL)
return NULL;
int lena = 0;
int lenb = 0;
ListNode *head = headA;
while(head)
{
lena++;
head = head->next;
}
head = headB;
while(head)
{
lenb++;
head = head->next;
}
if(lena > lenb)
{
int len = lena - lenb;
while(len-- > 0)
headA = headA->next;
}
else
{
int len = lenb - lena;
while(len-- > 0)
headB = headB->next;
}
while(headA)
{
if(headA == headB)
return headA;
headA = headA->next;
headB = headB->next;
}
return NULL;
}
};