public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode ha = headA, hb = headB;
while (ha != hb) {
ha = ha != null ? ha.next : headB;
hb = hb != null ? hb.next : headA;
}
return ha;
}
我们先遍历链表a,将a链表的所有节点放入一个set中。
之后再遍历b链表,如果b链表的某个节点出现在set中,那么就找到了第一个相交的节点 java实现
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
Set s = new HashSet();
ListNode p = headA;
ListNode q = headB;
//定义一个set之后,不断遍历p链表,然后将所有元素加入到set中
while(p!=null) {
s.add(p);
p = p.next;
}
while(q!=null) {
//遍历q链表,如果q链表的元素出现在set中,
//重合,而这个重合的就是第一个相交的节点就说明
//p和q两个链表有
if(s.contains(q)) {
return q;
}
q = q.next;
}
return null;
}
}