面试题 02.07. 链表相交

面试题 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;
    }
}
posted @ 2025-10-17 23:19  Nickey103  阅读(3)  评论(0)    收藏  举报