文章目录
问题一:相交链表
问题描述
给定两个单链表 headA
和 headB
,判断它们是否相交。若相交,返回相交的起始节点;否则返回 null
。
示例:
链表A: 1 → 2 → 3 → 4 → 5
链表B: 6 → 7 → 3 → 4 → 5
两链表在节点 3
处相交。
方法思路
双指针法
- 同步遍历:两个指针
pA
和pB
分别从headA
和headB
出发,每次各移动一步。 - 路径交换:
- 当
pA
到达链表A末尾时,将其重定向到headB
继续遍历。 - 当
pB
到达链表B末尾时,将其重定向到headA
继续遍历。
- 当
- 相遇条件:
- 若链表相交,两个指针最终会在相交节点相遇(此时走过的总步数相等)。
- 若不相交,最终两个指针会同时遍历完两个链表,均指向
null
。
代码实现
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