Leetcode: 160. 相交链表
两种解法:双指针法和哈希表法。

1.双指针法

思路:链表A和B同时登程,链表A走到开端,跳到B的结尾持续走,B走到开端,同样跳到A持续走,如果A,B不相等,继续执行,如果A,B相等,有两种可能:①A=B=null,A和B都来到了各自的开端,A,B无交点。②A=B=链表交点,该状况A,B存在交点,这时返回A,B任一节点即可。因而如果两个链表相交,返回的值是两链表第一个交点,如果不相交,返回的是null。

//双指针法public class Solution {    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {        if(headA == null || headA == null)  return null;        ListNode A = headA,B = headB;         while(A!= B){            A = A == null?headA:A.next;            B = B == null?headB:B.next;        }        return A;    }}

2.哈希表法

(1)如果指向链表的指针A或者B任何一个为空,则没有交点,返回null
(2)把链表A所有节点退出先hashset
(3)遍历链表B,在遍历过程中的节点如果在hashset中存在,则阐明该节点为公共节点,如果最终遍历完没有节点存在hashset中,两链表不相交,则返回空。

//哈希表法public class Solution {    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {        if(headA == null || headB == null) return null;        HashSet<ListNode> set = new HashSet<ListNode>();        while(headA != null){            set.add(headA);            headA = headA.next;        }        while(headB != null){            if(set.contains(headB)){                return headB;            }            headB = headB.next;        }        return null;    }}