面试题 02.07. 链表相交
双指针
思路
a 指针先遍历A再遍历B, b 指针先遍历B再遍历A,a == b 时退出循环。
若A与B没有交点,a = b = null;若A与B有交点,则a 与 b均均指向第一个相交的结点。
心得
得出初步思路后,先在case上验证,再动手写代码。否则思路没考虑全面的话,每次修改都会出现新的报错用例,低效。
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode a = headA; // a 指向A链表头结点
ListNode b = headB; // b 指向B链表头结点
while (a != b) {
// a 走一步,若到A链表末尾,则转到B链表
if (a != null) {
a = a.next;
} else {
a = headB;
}
// b 走一步,若到B链表末尾,则转到A链表
if (b != null) {
b = b.next;
} else {
b = headA;
}
}
return a;
}
}