Write a program to find the node at which the intersection of two singly linked lists begins.
For example, the following two linked lists:
A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → b3
begin to intersect at node c1.
Notes:
- If the two linked lists have no intersection at all, return
null
. - The linked lists must retain their original structure after the function returns.
- You may assume there are no cycles anywhere in the entire linked structure.
- Your code should preferably run in O(n) time and use only O(1) memory.
解法:
1.p1遍历链表A,p2遍历链表B
2.如果p1 到达了链表尾部p1开始遍历链表B
3.如果p2 到达了链表尾部,p2开始遍历链表A
4.如果p1 == p2 则找到了分叉点
代码:
class Solution(object): def getIntersectionNode(self, headA, headB): """ :type head1, head1: ListNode :rtype: ListNode """ if headA ==None or headB ==None: return None p1=headA p2=headB while p1 is not p2: p1 = p1.next p2 = p2.next if p1 is p2: return p1 if p1 is None: p1 = headB if p2 is None: p2 = headA return p1