给你两个单链表的头节点 headA
和 headB
,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null
。
题目数据 保证 整个链式结构中不存在环。
注意,函数返回结果后,链表必须 保持其原始结构 。
160. 相交链表 - 力扣(LeetCode)
思路:
创建两个指针 pointer1 和 pointer2,两个指针分别依次遍历headA、headB,区别在于,pointer1从 headA 开始遍历,而 pointer2 从 headB 开始遍历。都会遍历 m + n 次
在此过程中,如果有相同的结构,必定会同时遍历到。
public class Solution {public ListNode GetIntersectionNode(ListNode headA, ListNode headB) {ListNode pointer1 = headA;ListNode pointer2 = headB;while(pointer1 != pointer2){pointer1 = pointer1 == null ? headB : pointer1.next;pointer2 = pointer2 == null ? headA : pointer2.next;}return pointer1;}
}
时间复杂度:O(m+n),其中 m 和 n 分别是链表 headA 和 headB 的结点数。最坏情况下,每个指针遍历两个链表各一次。
空间复杂度:O(1)O。