思路:
说实话,一开始我没想出来为什么O(n+m)能遍历出结果,然后我看了解析,我的理解就是A链表跑完就去跑B链表,B链表跑完就去跑A链表,那总长度是一样的,跑完一圈还没有一样的,那就是不相交。那为什么跑完一圈会有一样的case呢? 因为两个链表相交部分长度相同,不相交部分长度不同,两个链表相互跑就会形成一种快慢指针的感觉,这样就会导致出现相同节点的情况。
代码:
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) {* val = x;* next = null;* }* }*/
public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode p1 = headA, p2 = headB;while(p1 != p2){if(p1 == null) p1 = headB;else p1 = p1.next;if(p2 == null) p2 = headA;else p2 = p2.next;}return p1;}
}