使用双指针node1,node2 分别指向两个链表 headA,headB 的头结点,然后同时分别逐结点遍历,当 node1 到达链表 headA 的末尾时,重新定位到链表 headB 的头结点;当 node2 到达链表 headB 的末尾时,重新定位到链表 headA 的头结点。
最后输出node1。结果要么是两个链表的公共节点,要么是null。
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode node1 = headA;
ListNode node2 = headB;
//考虑空链表情况
if(node1 == null || node2 == null){
return null;
}
while(node1 != node2){
if(node1 == null){
node1 = headB; //node1遍历完headA,则遍历headB
}else if(node2 == null){
node2 = headA; //node1遍历完headB,则遍历headA
}else{
node1 = node1.next;
node2 = node2.next;
}
}
return node1;
}