当前位置: 首页 > news >正文

判断两个单链表是否相交

问题:给两个单链表h1、h2,如何判断两个单链表是否相交?若相交,则找出第一个相交的节点。

解题思路:首先单链表的特点是,每一个结点都是由两个域  一个是data域、一个是 next指针域

                    相交的情况就是两条链表中有结点相同(即data域相等、next指针域也相等),而每一个结点只有一个next域,

                     所以一旦 两条链表相交,那么之后的链表就会是重合的情况,如下图所示呈现Y字形状:

解法一:第一直觉就是既然是两个链表寻找交点,双层循环遍历。

解法二:使用栈,根据最后两个链表最后相交的结点一定相同,只需要进行出栈判断(不会出现相交之后的部分长度不同的情况,因为单链表的定义里面既然相交的相交的后部分可以看做一个相同的链表的形式,两个链表只要有一个结点相交,后面就都相交)

解法三:使用链表长度截取到相同长度的时候进行比较

解法四:.哈希表法。

既然连个链表一旦相交,相交节点一定有相同的内存地址,而不同的节点内存地址一定是不同的,那么不妨利用内存地址建立哈希表,如此通过判断两个链表中是否存在内存地址相同的节点判断两个链表是否相交。具体做法是:遍历第一个链表,并利用地址建立哈希表,遍历第二个链表,看看地址哈希值是否和第一个表中的节点地址值有相同即可判断两个链表是否相交。 
我们可以采用除留取余法构造哈希函数。 
构造哈希表可以采用链地址法解决冲突。哈希表冲突指对key1 != key2,存在f(key1)=f(key2),链地址法就是把key1和key2作为节点放在同一个单链表中,这种表称为同义词子表,在哈希表中只存储同义词子表的头指针

时间复杂度O(length1 + length2)

相关文章:

  • HBASE分布式数据库
  • Java 的类加载机制
  • K-means算法
  • 如何管理自己的情绪
  • 记录win10装jdk
  • 按照开发阶段划分测试技术
  • 数据倾斜
  • Tomcat9启动乱码
  • @GetMapping和@RequestMapping的区别
  • 正则表达式-匹配A和B之间字符串
  • HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.
  • urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)
  • Mac下Chromedriver存放位置
  • 解决 Cannot open pip-script.py
  • Python安装docx库
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 【Leetcode】104. 二叉树的最大深度
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 345-反转字符串中的元音字母
  • E-HPC支持多队列管理和自动伸缩
  • Java IO学习笔记一
  • Java基本数据类型之Number
  • js算法-归并排序(merge_sort)
  • JS学习笔记——闭包
  • Mybatis初体验
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • Service Worker
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • Spring声明式事务管理之一:五大属性分析
  • Vue.js-Day01
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 大型网站性能监测、分析与优化常见问题QA
  • 聊聊directory traversal attack
  • 前嗅ForeSpider中数据浏览界面介绍
  • 实现菜单下拉伸展折叠效果demo
  • 通过git安装npm私有模块
  • 微信公众号开发小记——5.python微信红包
  • 小程序 setData 学问多
  • 一份游戏开发学习路线
  • 译有关态射的一切
  • 因为阿里,他们成了“杭漂”
  • 中文输入法与React文本输入框的问题与解决方案
  • #QT(智能家居界面-界面切换)
  • (1)虚拟机的安装与使用,linux系统安装
  • (3)选择元素——(17)练习(Exercises)
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (c语言)strcpy函数用法
  • (二)构建dubbo分布式平台-平台功能导图
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • .NET业务框架的构建
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • ??在JSP中,java和JavaScript如何交互?
  • @EnableConfigurationProperties注解使用