面试题 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;}
}