题目:
思路:
①若两条链表有交点的话,交点及以后的链表段必然相等(不考虑X型这样的相交),设链表A长度为a+m, 链表B长度为b+m
②此时要做的是就是消除前半段的长度差,所以当A/B链表的指针指向自己的尾部时,使其开始遍历B/A(对方的链表),相交且不为null时即为起始节点,若相交但为null时则没有交点
代码:
/**
* Definition for singly-linked list.
* 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;
ListNode A = headA, B = headB;
while(A != B){
A = (A == null) ? headB : A.next;
B = (B == null) ? headA : B.next;
}
return A;
}
}
复杂度分析:
时间复杂度:O(m+n)
空间复杂度:O(1)