解题思路
双指针
定义两个指针分别指向两条链表的头节点,不断向后遍历。若遍历至末尾,则跳至另一条链表的头节点。
如果两条链表相交,则两指针必定相遇。
解释如下:
假设 A 链表长为 a,B 链表长为 b,两链表公共部分长为 c
相遇时,pa 指针走过的路程:a + (b - c);pb 指针走过的路程:b + (a - c)。两者相等。
附上一篇直观的图解:图解相交链表
Java代码
/**
* 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) {
if (headA == null || headB == null) return null;
ListNode pa = headA;
ListNode pb = headB;
while (pa != pb) {
pa = pa == null ? headB : pa.next;
pb = pb == null ? headA : pb.next;
}
return pa;
}
}