相交链表:ACM 模式刷题
按标准输入读取测试数据,输出结果后可在 CodeACM 在线运行和提交。
题目描述
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。
图示两个链表在节点 c1 开始相交:
题目数据 保证 整个链式结构中不存在环。
注意,函数返回结果后,链表必须 保持其原始结构 。
自定义评测:
评测系统 的输入如下(你设计的程序 不适用 此输入):
· intersectVal - 相交的起始节点的值。如果不存在相交节点,这一值为 0
· listA - 第一个链表
· listB - 第二个链表
· skipA - 在 listA 中(从头节点开始)跳到交叉节点的节点数
· skipB - 在 listB 中(从头节点开始)跳到交叉节点的节点数
评测系统将根据这些输入创建链式数据结构,并将两个头节点 headA 和 headB 传递给你的程序。如果程序能够正确返回相交节点,那么你的解决方案将被 视作正确答案 。
输入格式
第一行输入三个整数 a、b、c,分别表示链表 A 的独有前缀长度、链表 B 的独有前缀长度和两条链表共享的公共后缀长度。
第二行输入 a 个整数,表示链表 A 在交点前独有的节点值。
第三行输入 b 个整数,表示链表 B 在交点前独有的节点值。
第四行输入 c 个整数,表示两条链表从交点开始共享的公共后缀节点值。若 c = 0,表示两条链表不相交;长度为 0 的行可以为空行。
输出格式
若存在公共节点,输出公共后缀第一个节点的值;否则输出 null。
数据范围
- 0 ≤ a, b, c ≤ 3 × 10⁴
- 1 ≤ a + b + c ≤ 10⁵
- 1 ≤ 节点值 ≤ 10⁵
公开样例
样例 1
输入
2 3 3 4 1 5 6 1 8 4 5
输出
8
第一行 2 3 3 表示:A 独有 2 个节点,B 独有 3 个节点,公共后缀有 3 个节点。A 独有部分是 4 → 1,B 独有部分是 5 → 6 → 1,公共后缀是 8 → 4 → 5。因此链表 A 为 4 → 1 → 8 → 4 → 5,链表 B 为 5 → 6 → 1 → 8 → 4 → 5,并且从值为 8 的节点开始是同一段公共节点,所以输出 8。
样例 2
输入
3 1 2 1 9 1 3 2 4
输出
2
第一行 3 1 2 表示:A 独有 3 个节点,B 独有 1 个节点,公共后缀有 2 个节点。公共后缀是 2 → 4,所以两条链表从值为 2 的同一个节点开始相交。
练习建议
先根据输入输出格式写出可运行程序,再用公开样例检查结果;遇到边界情况时,补充自测用例后提交。