这道题 要想解决其实不难, 开两层循环进行遍历就能实现,但是会超时

如果想要O(n) 的时间复杂度, 我考虑用哈希表来存储遍历过的元素,如果发现当前遍历的元素在哈希表里,那说明交叉点就在这

这里利用了哈希表的查找时间是O(1)

但是这种算法不能满足空间复杂度是O(1)的要求

代码像这样:

 class Solution(object):
def getIntersectionNode(self, headA, headB):
"""
:type head1, head1: ListNode
:rtype: ListNode
"""
# 如果有一个链表是空的 那就没有交叉
if headA is None or headB is None:
return None
# 计算一下两个链表的长度
ca = headA
cb = headB
ta, tb = 1, 1
while ca.next is not None:
ta += 1
ca = ca.next
while cb.next is not None:
tb += 1
cb = cb.next
# 如果最后一个元素都不一样说明没有交叉
if ca.val != cb.val:
return None
# 如果两个链表长度不一样,将长得链表指针后移
ca = headA
cb = headB
while tb > ta:
tb -= 1
cb = cb.next
while ta > tb:
ta -= 1
ca = ca.next
# 从倒数长度相同的 短的链表的开头开始一位一位比较
while ca is not None and cb is not None:
if ca.val == cb.val:
return ca
ca = ca.next
cb = cb.next

经过一段时间思考,如果要满足空间复杂度是O(1) 那就不能开辟新空间,智能用指针来回移动的办法

1 如果任何一个链表是空的说明没有交叉

2 如果链表交叉了最后一个元素肯定相同, 如果不相同说明没交叉

3 如果确定了有交叉,计算一下两个链表的长度,

  思想是 调整到一样长,然后按位比较 这样一次遍历就可以

  具体这样做: 每个链表都有一个遍历指针,

    短的链表的指针在头部

    长的链表指针后移若干位,一直到 两个链表从尾巴开始数 到遍历指针的长度是相同的

    接下来就一遍遍历 每一位都比较一下是否相等就可以

  这样没有开辟新的空间 时间上是一遍遍历O(n)

 class Solution(object):
def getIntersectionNode(self, headA, headB):
"""
:type head1, head1: ListNode
:rtype: ListNode
"""
# 建立一个哈希表,把每个第一次遍历到的元素存进去
# 如果发现之前存过当前元素说明交叉了
dic = {}
ca = headA
cb = headB
while ca is not None or cb is not None:
if ca is not None:
try:
dic[ca.val]
return ca
except:
dic[ca.val] = True
ca = ca.next
if cb is not None:
try:
dic[cb.val]
return cb
except:
dic[cb.val] = True
cb = cb.next
return None

leetcode 相交链表 python实现的更多相关文章

  1. LeetCode 相交链表&环形链表II

    题目链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/ 题目连接:https://leetcode-cn.com ...

  2. leetcode 奇偶链表 python

    要求空间复杂度O(1) 那就只能用指针不断改链表的指针, 不能建立新的内存 时间复杂度O(1) 一遍遍历 不能嵌套循环 我的思想是: 1 如果链表元素数量小于等于2个,那就无法操作 2 能操作的情况下 ...

  3. LeetCode 相交链表

    基本思路 先计算出两个链表的长度 O(n) 将长的一个链表的指示指针移动到和短链表相同长度 O(n) 两个链表指示指针同时向前移动,直到二者相同或者NULL 代码实现 /** * Definition ...

  4. 【LeetCode题解】160_相交链表

    目录 160_相交链表 描述 解法一:哈希表 思路 Java 实现 Python 实现 解法二:双指针(推荐) 思路 Java 实现 Python 实现 160_相交链表 描述 编写一个程序,找到两个 ...

  5. LeetCode 160: 相交链表 Intersection of Two Linked Lists

    爱写Bug(ID:iCodeBugs) 编写一个程序,找到两个单链表相交的起始节点. Write a program to find the node at which the intersectio ...

  6. LeetCode 160——相交链表(JAVA)

    编写一个程序,找到两个单链表相交的起始节点. 如下面的两个链表: 在节点 c1 开始相交. 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB ...

  7. leetcode腾讯精选练习之相交链表(六)

    相交链表 题目: 编写一个程序,找到两个单链表相交的起始节点. 如下面的两个链表: 在节点 c1 开始相交. 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5 ...

  8. Java实现 LeetCode 160 相交链表

    160. 相交链表 编写一个程序,找到两个单链表相交的起始节点. 如下面的两个链表: 在节点 c1 开始相交. 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4, ...

  9. Leetcode解题-链表(2.2.0)基础类

    1 基类的作用 在开始练习LeetCode链表部分的习题之前,首先创建好一个Solution基类,其作用就是: Ø  规定好每个子Solution都要实现纯虚函数test做测试: Ø  提供了List ...

随机推荐

  1. IIS 问题集锦

    本文主要记录IIS中遇到的各种问题以及注意事项 一.在IIS中.NET Framework的版本选择为什么没有v3.0,v3.5? 首先需要澄清的是这里有两个关于版本的东西:ASP.NET和.NET ...

  2. 终端多窗口分屏Terminator

    1.安装 Terminator最大的特点就是可以在一个窗口中打开多个终端 sudo apt-get install terminator 2.快捷键 Ctrl+Shift+E 垂直分割窗口 Ctrl+ ...

  3. Small Private Cloud Deployment Solution

    项目背景 为用户提供可访问的桌面虚拟机,方便软件研发人员日常办公,软件开发,编译等工作.主要操作包括Visor制图.程序开发测试以及使用office软件办公. 目前阶段需要支持100台虚拟机(4VCP ...

  4. Eclipse中各种编码格式及设置

    操作系统:Windows 10(家庭中文版) Eclipse版本:Version: Oxygen.1a Release (4.7.1a) 刚看到一篇文章,里面介绍说Ascii.Unicode是编码,而 ...

  5. ASP.NET Web Api OwinSelfHost Restful 使用

    一.前言 总结一下什么是RESTful架构: (1)每一个URI代表一种资源: (2)客户端和服务器之间,传递这种资源的某种表现层: (3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现&q ...

  6. Python 安装requests模块

    window下安装: 注:不要使用 easy_install requests 命令 这种方式安装后不能卸载,建议使用pip 方法 1.自动安装 输入cmd命令进入命令行窗口,执行 pip insta ...

  7. (转载)使用SQL-Server创建一个银行数据管理系统Ⅰ

    首先,要创建一个完整的数据管理系统,不是一蹴而就的,一定要要一步一步的来,不断完善,最终方能达到自己想要的结果,所以我在这里也是一点一点分步来做的. 创建数据库,数据库属性在这里用的是默认(不推荐使用 ...

  8. Effective STL 笔记 -- Item 6 ~ 7: Container and Object Pointer

    Effective STL 笔记 – Item 6 ~ 7: Container and Object Pointer 中间两次笔记被删掉了,简单补一下: Item 3 中提到如果将对象直接放入容器中 ...

  9. Python decorator装饰器

    问题: 定义了一个新函数 想在运行时动态增加功能 又不想改动函数本身的代码 通过高阶段函数返回一个新函数 def f1(x): return x*2 def new_fn(f): #装饰器函数 def ...

  10. Cannot read property ‘msie’ of undefined错误原因以及解决方案

    最近把一个项目的jQuery升级到最新版,发现有些页面报错Cannot read property ‘msie’ of undefined.上jQuery网站上搜了一下,$.browser这个api从 ...