当前位置:实例文章 » 其他实例» [文章]编程导航算法通关村第 1关 | 两个链表的第一个公共节点

编程导航算法通关村第 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 的第一个公共节点。
* 执行算法。
* 输出结果。

相关标签:算法链表数据结构
其他信息

其他资源

Top