题目描述
原题链接
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。
题目数据 保证 整个链式结构中不存在环。
注意,函数返回结果后,链表必须 保持其原始结构 。
成绩
解题思路
初始化两个 “指针变量”:headAIndex 指针指向 A 链表的头节点,headBIndex 指针指向 B 链表的头节点。
同时用 headAIndex 指针 和 headBIndex 分别对 A 链表和 B 链表进行遍历。当 headAIndex 遍历完 A 后,将其指向 B 链表的头节点,然后开始用 headAIndex 遍历 B 链表;当 headAIndex 遍历完 B 后,将其指向 A 链表的头节点,然后开始用 headBIndex 遍历 A 链表。
当 headAIndex 指向的内容后 headBIndex 指向的内容一致时,后返回它们共同指向的内容:
headAIndex == null && headBIndex == null
,返回 null。headAIndex == headBIndex && headAIndex != null
,返回指向的节点。
代码实现
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode headAIndex = headA;
ListNode headBIndex = headB;
while (true) {
if (headBIndex == headAIndex) { // 找到两个链表的相交节点
return headAIndex;
}
headAIndex = headAIndex.next;
headBIndex = headBIndex.next;
if (headAIndex == null && headBIndex == null) { // 两个链表没有相交节点
return null;
}
if (headAIndex == null) {
headAIndex = headB;
}
if (headBIndex == null) {
headBIndex = headA;
}
}
}
}