编程导航算法通关村第 1关 | 两个链表的第一个公共节点
发布人:shili8
发布时间:2025-01-06 11:18
阅读次数:0
**编程导航算法通关村第1关**
**题目描述**
给定两个单向链表,找到它们的第一个公共节点。
**输入**
* `headA`: 链表 A 的头结点* `headB`: 链表 B 的头结点**输出**
* 公共节点的值(如果存在)
**解决方案**
我们将使用两个指针分别遍历链表 A 和链表 B,直到找到公共节点。
class ListNode:
def __init__(self, x):
self.val = x self.next = Nonedef findFirstCommonNode(headA, headB):
# 如果链表 A 或链表 B 为 None,则返回 None if not headA or not headB:
return None # 初始化两个指针,分别指向链表 A 和链表 B 的头结点 pA = headA pB = headB # 遍历链表 A 和链表 B,直到找到公共节点 while pA and pB:
# 如果当前节点相同,则返回该节点的值 if pA == pB:
return pA.val # 移动指针 pA = pA.next pB = pB.next # 如果没有找到公共节点,则返回 None return None# 示例代码if __name__ == "__main__":
# 创建链表 A 和链表 B headA = ListNode(1)
headA.next = ListNode(2)
headA.next.next = ListNode(3)
headB = ListNode(4)
headB.next = ListNode(5)
headB.next.next = ListNode(6)
headB.next.next.next = ListNode(7)
# 将链表 B 的最后一个节点指向链表 A 的第一个公共节点 headB.next.next.next.next = headA # 执行算法 result = findFirstCommonNode(headA, headB)
if result:
print("第一个公共节点的值为:", result)
else:
print("没有找到公共节点")
**注释**
* `findFirstCommonNode` 函数负责找到两个链表的第一个公共节点。
* 如果链表 A 或链表 B 为 None,则返回 None。
* 初始化两个指针,分别指向链表 A 和链表 B 的头结点。
* 遍历链表 A 和链表 B,直到找到公共节点。
* 如果当前节点相同,则返回该节点的值。
* 移动指针。
* 如果没有找到公共节点,则返回 None。
**示例**
* 创建链表 A 和链表 B。
* 将链表 B 的最后一个节点指向链表 A 的第一个公共节点。
* 执行算法。
* 输出结果。

