160. 相交链表

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/class Solution {public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode* p = headA, * q = headB;while(p != q){p = p ? p->next : headB;q = q ? q->next : headA;}return p;}};
142. 环形链表 II
- 判断链表是否有环
快慢指针,快指针走2步,慢指针走1步
若能相遇则有环,快指针走x+y+n(y+z),慢指针走x+y
为什么慢指针不走**x+y+m(y+z)**?
slow在环入口时,fast在环的任意位置,假设在距离环入口k位置;
相遇时fast走2k,slow走k,由于k


- 找到环的入口
快=2慢=> x+y+n(y+z)=2(x+y)=> x = (n-1)(y+z)+z
index1、index2分别从头节点、相遇点同时出发分别经过x, z,在环入口相遇
