## Thursday, November 27, 2014

### [LeetCode新题] Intersection of Two Linked Lists

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.

Notes:
• If the two linked lists have no intersection at all, return `null`.
• The linked lists must retain their original structure after the function returns.
• You may assume there are no cycles anywhere in the entire linked structure.
• Your code should preferably run in O(n) time and use only O(1) memory.

1. 如何判断两链表是否相交？

2. 如何判断两链表相交的起始节点？

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34``` ```class Solution { public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { if(!headA || !headB) return NULL; int lenA = 0, lenB = 0; ListNode *tailA = headA, *tailB = headB; while(tailA->next) { tailA = tailA->next; lenA++; } while(tailB->next) { tailB = tailB->next; lenB++; } if(tailA!=tailB) return NULL; if(lenA>lenB) { for(int i=0; inext; } else { for(int i=0; inext; } while(headA!=headB) { headA = headA->next; headB = headB->next; } return headA; } }; ```