160.相交链表-力扣 Python
题目描述:
示例:
思想写在代码注释:
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
# 最直接的想法就是可以使用Hashset来记录一个链表的所有节点,然后和另一条链表来进行对比,但这样需要额外的空间
# 不使用额外的空间,只是使用两个指针,难点:两条链表的长度可能不同,两条链表之间的节点无法对应
# 操作就是:让p1遍历完链表A之后开始遍历链表B,让p2遍历完链表B开始遍历链表A,这样相当于逻辑上将两条链表拼接在了一起
class Solution(object):
def getIntersectionNode(self, headA, headB):
# 创建两个指针p1和p2用于动态的扫描操作
p1 = headA
p2 = headB
# 开始进行扫描,终止条件就是p1和p2同时指向了同一个节点
while p1 != p2:
# p1走一步,如果走到A链表末尾,转到B链表
if p1 is None:
p1 = headB
else:
p1 = p1.next
# p2走一步,如果走到B链表末尾,转到A链表
if p2 is None:
p2 = headA
else:
p2 = p2.next
return p1
图示讲解: