一.原题如下
二.解题思路
- 这道题的解决思路是使用双指针,分别指向两个链表
- 核心是将两个链表彼此累加,在进行遍历
三.复杂度
- 时间复杂度:O(n)
- 空间复杂度:O(1)
四.完整题解
具体步骤请查看每个关键步骤的代码注释
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
// 定义双指针
ListNode p1 = headA, p2 = headB;
// 循环操作
while (p1 != p2) {
// 如果p1指针为空,则转接到b链条;否则p1向前走一步
if (p1 == null) {
p1 = headB;
} else {
p1 = p1.next;
}
// 如果p2指针为空,则转接到a链表;否则p2向前走一步
if (p2 == null) {
p2 = headA;
} else {
p2 = p2.next;
}
}
// 循环完毕直接返回,也有可能为null
return p1;
}
}