题目:
Write a program to find the node at which the intersection of two singly linked lists begins.
解答:
作为曾经大二暑假去面度娘实习被问的题目之一,看到之后格外温馨(然而面度娘的时候还并没有刷过一道leetcode。。。
其实把图画出来就会很简单,如果两个链表由交点,那么最终一定是链表终点是一样的,假设一个长Len1,另一个是Len2,如果Len1 > Len2,那么在L1的前Len1 - Len2个节点中一定不会有交点,只需要拿L1的后Len2个和L2比较即可,用两个指针就可以轻易比较
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
int linkLen(ListNode *head)
{
int cnt = 0;
while(head)
{
head = head->next;
cnt++;
}
return cnt;
}
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
int lenA = linkLen(headA);
int lenB = linkLen(headB);
int proceed = abs(lenA - lenB);
if(lenA > lenB)
{
for(int i = 0;i < proceed;++i)
headA = headA->next;
}
else
{
for(int i = 0;i < proceed;++i)
headB = headB->next;
}
while(headA && headB)
{
if(headA == headB)
return headA;
headA = headA->next;
headB = headB->next;
}
return NULL;
}
};