热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

两个单向链表是否相交汇总

投了腾讯IOS客户端开发岗,结果面试官大大问了一堆操作系统,数据结构,算法,计算机网络问题,orz࿰

投了腾讯IOS客户端开发岗,结果面试官大大问了一堆操作系统,数据结构,算法,计算机网络问题,orz,给大神跪了!最后问大神什么职位,大神说他就是IOS工程师。真服了!当时问了算法,关于链表,当时没想起来,面完之后拿个纸算算,我竟然会。写下来,mark一下。

 

问题:给出两个单向链表的头节点,判断两个链表是否相交,如果相交,请找出相交节点。

这个问题是分好几种情况的,要分支来判断:

假定两个单链表分别为链表A和链表B,则:

1.A无环,B无环,存在以下三种情况:

  (1). (2). (3).

2.A有环,B无环(A无环,B有环亦然),存在一种情况:

               

3.A有环,B有环,则存在三种情况:

  (1). (2). (3).

判断一个单向是否有环的方法:从该链表头指针开始,设置两个指针,一个快指针,一个慢指针。快指针每次沿着链表走两个链节,慢指针每次沿着链表走一个链节,当两个指针指向同一个链节时(即两个指针相等),说明链表有环;当快指针指向null时,说明链表无环。

对于情况1:

    分别遍历得到两个链表的长度,并且在遍历的时候,比较两个链表的终节点,如果不同,则是(2);如果相同,则为(1)或(3).

    对(1)(3),取链表节点数的差值,将长链表从差值处开始遍历,短节点从头结点开始遍历,比较两个节点是否相等,不相等继续向下遍历,直至相等找到相交节点。

对于情况2:

    直接得出结论,二者不相交。

对于情况3:

    判断A有环的因为快慢指针指向了同一个节点,记为交点A,B的记为交点B。从交点A放出一个慢指针,每次沿链表走一个链节;交点B放出一个快指针,每次沿着链表走

    两个链节。当两个指针相交,则说明A、B共用一个环,情形为(2)或(3);当A的慢指针走回交点A,两个指针仍然没相交,说明情况为(1).

    对(2)(3),将交点A的next指向null,断开环路然后按照1(3)中的线性查找方法去找相交节点,一定能找到一个交点C。

    我们将交点A的next复原,从交点C开始遍历,找到交点C的前节点,让交点C前节点的next指向null,这个时候能够找到交点D。当交点C与交点D相同时,为情况(2);不

    相等时为情况(3).

转:https://www.cnblogs.com/cwkpql/p/4743602.html



推荐阅读
  • 解题心得:UVA1339(逻辑分析与字符串处理+排序算法)
    解题心得:UVA1339(逻辑分析与字符串处理+排序算法) ... [详细]
  • 在 Linux 环境下,多线程编程是实现高效并发处理的重要技术。本文通过具体的实战案例,详细分析了多线程编程的关键技术和常见问题。文章首先介绍了多线程的基本概念和创建方法,然后通过实例代码展示了如何使用 pthreads 库进行线程同步和通信。此外,还探讨了多线程程序中的性能优化技巧和调试方法,为开发者提供了宝贵的实践经验。 ... [详细]
  • 图论入门基础教程
    图论是计算机科学和数学中的重要分支,本教程旨在为初学者提供全面的基础知识。通过实例解析,如“昂贵的聘礼”问题,讲述了一个年轻探险家在印第安部落与酋长女儿的爱情故事,展示了图论在解决实际问题中的应用。教程内容涵盖了图的基本概念、表示方法以及常见算法,适合各类读者学习。 ... [详细]
  • Python进阶笔记:深入理解装饰器、生成器与迭代器的应用
    本文深入探讨了Python中的装饰器、生成器和迭代器的应用。装饰器本质上是一个函数,用于在不修改原函数代码和调用方式的前提下为其添加额外功能。实现装饰器需要掌握闭包、高阶函数等基础知识。生成器通过 `yield` 语句提供了一种高效生成和处理大量数据的方法,而迭代器则是一种可以逐个访问集合中元素的对象。文章详细解析了这些概念的原理和实际应用案例,帮助读者更好地理解和使用这些高级特性。 ... [详细]
  • Cosmos生态系统为何迅速崛起,波卡作为跨链巨头应如何应对挑战?
    Cosmos生态系统为何迅速崛起,波卡作为跨链巨头应如何应对挑战? ... [详细]
  • MyISAM和InnoDB是MySQL中最为广泛使用的两种存储引擎,每种引擎都有其独特的优势和适用场景。MyISAM引擎以其简单的结构和高效的读取速度著称,适用于以读操作为主、对事务支持要求不高的应用。而InnoDB引擎则以其强大的事务处理能力和行级锁定机制,在需要高并发写操作和数据完整性的场景下表现出色。选择合适的存储引擎应综合考虑业务需求、性能要求和数据一致性等因素。 ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
  • WebStorm 是一款强大的集成开发环境,支持多种现代 Web 开发技术,包括 Node.js、CoffeeScript、TypeScript、Dart、Jade、Sass、LESS 和 Stylus。它为开发者提供了丰富的功能和工具,帮助高效构建和调试复杂的 Node.js 应用程序。 ... [详细]
  • 提升学习效率不仅需要正确的方法,还需要一些实用的小技巧。本文总结了多条有助于提高学习效果的建议,包括合理安排时间、选择合适的学习环境、运用记忆技巧等。通过这些方法,可以帮助学生更好地集中注意力,提高学习效率,达到事半功倍的效果。 ... [详细]
  • 在特定场景下,如何实现在常数时间复杂度内高效删除单向链表中的指定节点是一个值得探讨的问题。本文详细分析了给定单向链表的头指针和目标节点指针的情况下,如何设计一个高效的算法,在O(1)时间内完成节点的删除操作。通过巧妙地调整节点之间的连接关系,该方法不仅提高了删除操作的时间效率,还确保了链表结构的完整性。此外,文章还讨论了该方法在实际应用中的优缺点及适用场景。 ... [详细]
  • 探讨LaTeX中四级标题的使用与常见问题解决方案
    在LaTeX文档排版中,四级标题的使用方法及其常见问题的解决策略是本文的重点。通常情况下,LaTeX支持一级、二级和三级标题,分别通过`\section{}`、`\subsection{}`和`\subsubsection{}`命令实现。然而,对于需要四级标题的情况,用户往往面临格式不一致或编译错误等问题。本文将详细介绍如何通过自定义命令或其他扩展包来实现四级标题,并提供具体的示例和解决方案,以帮助用户更好地管理和排版复杂的文档结构。 ... [详细]
  • `chkconfig` 命令主要用于管理和查询系统服务在不同运行级别中的启动状态。该命令不仅能够更新服务的启动配置,还能检查特定服务的当前状态。通过 `chkconfig`,管理员可以轻松地控制服务在系统启动时的行为,确保关键服务正常运行,同时禁用不必要的服务以提高系统性能和安全性。本文将详细介绍 `chkconfig` 的各项参数及其使用方法,帮助读者更好地理解和应用这一强大的系统管理工具。 ... [详细]
  • Windows环境下RabbitMQ安装详尽指南
    Windows环境下RabbitMQ安装详尽指南 ... [详细]
  • 如何利用Java 5 Executor框架高效构建和管理线程池
    Java 5 引入了 Executor 框架,为开发人员提供了一种高效管理和构建线程池的方法。该框架通过将任务提交与任务执行分离,简化了多线程编程的复杂性。利用 Executor 框架,开发人员可以更灵活地控制线程的创建、分配和管理,从而提高服务器端应用的性能和响应能力。此外,该框架还提供了多种线程池实现,如固定线程池、缓存线程池和单线程池,以适应不同的应用场景和需求。 ... [详细]
  • 每日前端实战:148# 视频教程展示纯 CSS 实现按钮两侧滑入装饰元素的悬停效果
    通过点击页面右侧的“预览”按钮,您可以直接在当前页面查看效果,或点击链接进入全屏预览模式。该视频教程展示了如何使用纯 CSS 实现按钮两侧滑入装饰元素的悬停效果。视频内容具有互动性,观众可以实时调整代码并观察变化。访问以下链接体验完整效果:https://codepen.io/comehope/pen/yRyOZr。 ... [详细]
author-avatar
因为梦想2013
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有