暴力法
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode nodeA = headA;
while(nodeA != null){
ListNode nodeB = headB;
while(nodeB != null){
if(nodeA == nodeB) return nodeA;
nodeB = nodeB.next;
}
nodeA = nodeA.next;
}
return null;
}
}
把链表 A 的每一个节点都遍历一次链表 B 的全部节点,存在相同节点则返回,否则返回 null
- 空间复杂度:O(1)
- 时间复杂度:O(n^2)
双指针法
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode A = headA;
ListNode B = headB;
while(A != B){
A = A == null? headA: A.next;
B = B == null? headB: B.next;
}
return A;
}
}
参考题解
这里如果没有公共节点的话时间复杂度会降到最差
- 空间复杂度:O(1)
- 时间复杂度:O(a + b)