1 题目
输入两个链表,找出它们的第一个公共结点。
时间限制:1s;空间限制:32768K
2 思路描述
使用两个指针 分别指向两个链表的第一个结点
。将分为以下几种情况:
- 当两个链表长度相等,且有公共结点时,两个指针同时后移,会找到第一个公共节点。当
时退出。
![](https://img.haomeiwen.com/i13261430/6d5bf20656610dd3.jpg)
- 当两个链表长度相等,且没有公共结点时,两个指针同时后移,直到两个指针都指向 None 退出。
![](https://img.haomeiwen.com/i13261430/af8e2a940d102dc3.jpg)
- 当两个链表长度不等,且有公共结点时,两个指针同时后移,当
指向 None 后,将其重新指向第二个链表的第一个结点
。当
指向 None 后,将其重新指向第一个链表的第一个结点
。当
时退出。
![](https://img.haomeiwen.com/i13261430/aa57074454f0cae7.jpg)
- 当两个链表长度不等,且没有公共结点时,两个指针同时后移,当
指向 None 后,将其重新指向第二个链表的第一个结点
。当
指向 None 后,将其重新指向第一个链表的第一个结点
。当
时退出。
![](https://img.haomeiwen.com/i13261430/1bfc4a889ac671ca.jpg)
3 程序代码:
class Solution:
def FindFirstCommonNode(self, pHead1, pHead2):
if not pHead1 or not pHead2:
return None
p1, p2 = pHead1, pHead2
while p1 != p2:
p1 = (pHead2 if not p1 else p1.next)
p2 = (pHead1 if not p2 else p2.next)
return p1
网友评论