思路:
这道题一开始想用双指针做,但是后来没想出来好办法。其实用两趟遍历,用hashmap来计数也可以。
下面就只给出双指针的方法:
两个指针同时从这两个链表的头部出发,每次都往后移动一个结点。到达尾部的指针又从另一个链表的头部出发。这时候当两个指针指向的结点相同时,该节点就是相交的结点。
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
HashSet<ListNode> set = new HashSet<>();
ListNode p = headA;
ListNode q = headB;
while(p!=null)
{
set.add(p);
p = p.next;
}
while(q!=null)
{
if(set.contains(q))
return q;
q = q.next;
}
return q;
}