剑指Offer 36. 两个链表的第一个公共结点 (链表)
题目描述
输入两个链表,找出它们的第一个公共结点。
题目地址
思路
思路1:把两个链表拼接起来,一个pHead1在前pHead2在后,一个pHead2在前pHead1在后,这样,生成了两个相同长度的链表,我们只要同时遍历这两个表,就一定能找到公共节点。时间复杂度O(m+n),空间复杂度O(m+n).
思路2:首先依次遍历两个链表,记录两个链表的长度m和n,如果 m > n,那么我们就先让长度为m的链表走m-n个结点,然后两个链表同时遍历,当遍历到相同的结点的时候停止即可。对于 m < n,同理。
Python
# -*- coding:utf-8 -*-
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
node1 = ListNode(1)
node2 = ListNode(2)
node3 = ListNode(3)
node4 = ListNode(4)
node5 = ListNode(5)
node6 = ListNode(6)
node1.next = node2
node2.next = node5
node5.next = node6
node3.next = node4
node4.next = node5
class Solution:
def FindFirstCommonNode(self, pHead1, pHead2):
# 方法1
# if not pHead1 or not pHead2:
# return None
# cur1, cur2 = pHead1, pHead2
# while cur1 != cur2:
# cur1 = cur1.next if cur1 else pHead2
# cur2 = cur2.next if cur2 else pHead1
# return cur1 # 方法2
if not pHead1 or not pHead2:
return None
m = n = 0
cur1, cur2 = pHead1, pHead2
while cur1:
m += 1
cur1 = cur1.next
while cur2:
n += 1
cur2 = cur2.next
if m > n:
for i in range(m-n):
pHead1 = pHead1.next
while pHead1:
if pHead1 == pHead2:
return pHead1
pHead1, pHead2 = pHead1.next, pHead2.next
else:
for i in range(n-m):
pHead2 = pHead2.next
while pHead1:
if pHead1 == pHead2:
return pHead1
pHead1, pHead2 = pHead1.next, pHead2.next
return None if __name__ == '__main__':
result = Solution().FindFirstCommonNode(node1, node3)
while result:
print(result.val, end = ' ')
result = result.next
剑指Offer 36. 两个链表的第一个公共结点 (链表)的更多相关文章
- [剑指Offer] 36.两个链表的第一个公共结点
题目描述 输入两个链表,找出它们的第一个公共结点. [思路]找出两个链表的长度,然后让长的走两个链表的长度差,然后再一起走(因为两个链表用公共的尾部). /* struct ListNode { in ...
- 剑指offer-两个链表的第一个公共结点-链表-python
题目描述 输入两个链表,找出它们的第一个公共结点. class Solution: def FindFirstCommonNode(self, pHead1, pHead2): # write c ...
- C++版 - 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告
剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?t ...
- 剑指Offer - 九度1505 - 两个链表的第一个公共结点
剑指Offer - 九度1505 - 两个链表的第一个公共结点2013-11-24 20:09 题目描述: 输入两个链表,找出它们的第一个公共结点. 输入: 输入可能包含多个测试样例.对于每个测试案例 ...
- 剑指Offer(三十六):两个链表的第一个公共结点
剑指Offer(三十六):两个链表的第一个公共结点 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.ne ...
- 【剑指Offer面试编程题】题目1505:两个链表的第一个公共结点--九度OJ
题目描述: 输入两个链表,找出它们的第一个公共结点. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入的第一行为两个整数m和n(1<=m,n<=1000):代表将要输入的两个链表 ...
- 剑指 Offer 52. 两个链表的第一个公共节点 + 链表 + 第一个公共结点 + 双指针
剑指 Offer 52. 两个链表的第一个公共节点 Offer_52 题目详情 题解分析 可以使用两个指针 node1,node2 分别指向两个链表 headA,headB 的头结点,然后同时分别逐结 ...
- 力扣 - 剑指 Offer 52. 两个链表的第一个公共节点
题目 剑指 Offer 52. 两个链表的第一个公共节点 思路1(栈) 若两个链表相遇,则从它开始相遇的地方到链表末尾应该都是相同的,那么我们可以将两个链表分别放入两个栈中,然后依次循环比较两个栈顶的 ...
- 《剑指offer》第五十二题(两个链表的第一个公共结点)
// 面试题52:两个链表的第一个公共结点 // 题目:输入两个链表,找出它们的第一个公共结点. #include <iostream> #include "List.h&quo ...
随机推荐
- 0.3:Before We Start
文章著作权归作者所有.转载请联系作者,并在文中注明出处,给出原文链接. 本系列原更新于作者的github博客,这里给出链接. 需要做的准备 首先肯定是需要安装Unity,我这里选择的版本是Unity ...
- Springboot 使用PageHelper分页插件实现分页
一.pom文件中引入依赖 二.application.properties中配置以下内容(二选一方案) 第一种:pagehelper.helper-dialect=mysqlpagehelper.re ...
- hdoj1905 Pseudoprime numbers (基础数论)
Problem Description Fermat's theorem states that for any prime number p and for any integer a > 1 ...
- 剑指offer(6)旋转数组中的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个 ...
- idea使用svn报错
第一种情况:idea没有安装svn. 选择file→settings→plugins,在右侧框中搜索"SVN"(有的是subversion),选中搜索出来的东西,然后点击下面的in ...
- centos6.5安装zabbix3.2
1.安装PHP Zabbix 3以后对PHP的要求最低为5.4,而CentOS6默认为5.3.3,完全不满足要求,故需要利用第三方源,将PHP升级到5.4以上,注意,不支持PHP7 rpm -ivh ...
- 最新版的Chrome如何始终开启flash而不是先询问?
链接:https://www.zhihu.com/question/266170237/answer/342137190 设置Chrome启用Flash,修改配置之前先看Chrome的版本,不同版 ...
- 安装完MySQL数据库设置密码
对于windows平台来说安装完MySQL数据库后,系统就已经默认生成了许可表和账户,你不需要像在Unix平台上那样执行 mysql_install_db脚本来生成帐户和相应权限许可表.但是如果不是用 ...
- 使用vue.js + laravel开发单页面应用
最近学了vuejs和laravel,然后顺便就撸了简单的demo,这里将会根据这个demo介绍下如何使用vuejs+laravel开发一个简单的单页面应用,demo的github地址是https:// ...
- Thinkphph 使用RelationModel的三表关联查询机制
有如下三个表 a表 b表 c表id bid other id cid other id other a表的bid关联b表的id,b表的cid关联c表的id 现在需要查询a表的时候顺带把b表和c表的相关 ...