编写一个程序,找到两个单链表相交的起始节点。
注意:
- 如果两个链表没有交点,返回 null.
- 在返回结果后,两个链表仍须保持原有的结构。
- 可假定整个链表结构中没有循环。
- 程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。
解
双指针
设
- A 为链表A的非公共部分
- B 为链表B的非公共部分
- C 为公共部分 (可能为空)
则 A + C + B == B + C + A
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def getIntersectionNode(self, headA, headB):
"""
:type headA, headB: ListNode
:rtype: ListNode
"""
i = headA
j = headB
while i != j:
if i is None:
i = headB
else:
i = i.next
if j is None:
j = headA
else:
j = j.next
return i