[](题解 | #两个链表的第一个公共结点 Python#_牛客博客 (nowcoder.net))
# 两个链表的第一个公共结点
class Node:
def __init__(self, element=None):
self.element = element
self.next = None
class Show_Node:
# 根据输入的列表创建链表
def single_link(self, list_):
if not list_:
return Node()
for index, value in enumerate(list_):
if index == 0: # 首元素的插入
head = Node(value)
cur_ = head
else: # 后续元素的插入
cur_.next = Node(value)
cur_ = cur_.next
return head
# 以列表的形式查看链表
def traverse(self, node):
list_ = []
while node is not None: # 遍历所有节点
list_.append(node.element) # 结点元素填入列表
node = node.next
return list_
# 计算链表长度
def length_link(self, node):
cur = node
len_ = 0 # 计数
while cur is not None: # 遍历所有节点
len_ += 1 # 计数
cur = cur.next # cur指向下一个节点
return len_
class Solution:
def FindFirstCommonNode(self, pHead1, pHead2):
# write code here
# 长度相同有公共结点,第一次就遍历到;没有公共结点,走到尾部NULL相遇,返回NULL
# 长度不同有公共结点,第一遍走完长度的差值就出来了,第二遍一起到公共结点;没有公共,第二遍一起到结尾NULL。
p1 = pHead1
p2 = pHead2
while p1 != p2:
if not p1:
p1 = pHead2
else:
p1 = p1.next
if not p2:
p2 = pHead1
else:
p2 = p2.next
return p1