/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
/* 方法
1:穷举
2:hash表记录第一个遍历的链表
3:双指针,分别从两边的头开始,当一边到null后就换成从另一边的头开始,以此类推,当两者相等时就跳出来返回
4:双指针,不过先分别遍历两个链表的长度,用较长的减去较短的,得到一个差值,然后长的那个指针从头部往后差值个结点开始,短的那个指针从头开始,双双向后移动,直到相遇则为第一个交点,若为null则为不相交
*/
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB)
{
ListNode* a = headA;
ListNode* b = headB;
while(a != b)
{
a = a==NULL?headB:a->next;
b = b==NULL?headA:b->next;
}
return a;
}
};
四种方法 都可以
1:穷举
2:hash表记录第一个遍历的链表
3:双指针,分别从两边的头开始,当一边到null后就换成从另一边的头开始,以此类推,当两者相等时就跳出来返回
4:双指针,不过先分别遍历两个链表的长度,用较长的减去较短的,得到一个差值,然后长的那个指针从头部往后差值个结点开始,短的那个指针从头开始,双双向后移动,直到相遇则为第一个交点,若为null则为不相交