美文网首页学习准备
两个无限长度链表(也就是可能有环) 判断有没有交点

两个无限长度链表(也就是可能有环) 判断有没有交点

作者: 暗夜精灵_NightElf | 来源:发表于2017-12-01 14:30 被阅读787次

给定单链表,检测是否有环。如果有环,则求出进入环的第一个节点。

判断单向链表是否有环,可以采用快指针与慢指针的方式来解决。即定义一个快指针fast和一个慢指针slow,使得fast每次跳跃两个节点,slow每次跳跃一个节点。如果链表没有环的话,则slow与fast永远不会相遇(这里链表至少有两个节点);如果有环,则fast与slow将会在环中相遇。

然后获取环的入口点方法如图所示:

给定两个单链表(链表自身无环),检测两个链表是否有交点,如果有返回第一个交点。

检测两个单链表是否有交点是很容易的,因为如果两个链表有交点,那么这两个链表的最后一个节点必须相同,所以只需比较最后一个节点即可。但是这种方案是无法求出第一个交点的,所以需要另辟蹊径。另外,判断是否有交点可以转换成链表是否有环的问题。让一个链表的最后一个节点指向第二个链表的头结点,这样的话,如果相交,则新的链表是存在环的,并且交点便是环的入口点。

给定两个单链表(不确定是否带环),判断是否有交点

先判断两个链表是否带环;

i).如果两个都不带环,可以用:判断两个无环单链表是否有交点。

ii).两个都带环:找到两个入环点r1,r2,环1的入环点为r1,从r1开始遍历一圈,每个结点如r2比较

iii).一个带环一个不带环,则肯定不相交。

给定单链表头结点,删除链表中倒数第k个结点

这个问题的关键是需要获取倒数第k个节点。如何获取呢?这里,需要两个指针p和q,p指向头结点,q指向距离头结点为k的节点。这样p和q每次遍历一个节点,当q遍历到末尾的时候,p指向的节点即为倒数第k个节点,然后删除即可。

只给定单链表中某个结点p(并非最后一个结点,即p->next!=NULL)指针,删除该结点;

只给定单链表中某个结点p(非空结点),在p前面插入一个结点。

上诉两种方法的原理都是一样的。

作者:kidzss

链接:http://www.jianshu.com/p/c12f90300077

來源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章

  • 两个无限长度链表(也就是可能有环) 判断有没有交点

    给定单链表,检测是否有环。如果有环,则求出进入环的第一个节点。 判断单向链表是否有环,可以采用快指针与慢指针的方式...

  • 常见的算法题

    一、找两个链表的交点 存在集中特殊情况: 1、链表长度相同且没交点 2、链表长度相同有交点 3、长度不同有交点(最...

  • 链表

    单向链表 链表反转 判断是否有环,找链表的中间节点 快慢指针 找环的入口(求两个链表的交点可以转化成这个问题) p...

  • 链表 环

    1 链表是否有环先使用快慢指针确定是否有环2 链表环交点L代表环之前的长度x代表环入口点与相遇处的长度R代表环的长...

  • 链表环操作(java实现)

    判断链表有没有环有环链表一般我们采取快慢指针来判断链表是否有环。思路主要是:定义两个指针。fast和slow;fa...

  • 链表求交

    求两个链表是否有交点和交点位置。先判断是否有环。如果两者一个有一个没有,一定没有交点。 两者无环 思路很简单:先求...

  • 链表相交问题

    判断两个单向链表是否相交,并找出他们的交点。这个问题我们分三种情况讨论: 一. 两个链表都不存在环 问题思路: ...

  • 算法题面试复习

    算法模块 1. 链表 1. 链表翻转 2. 单链表判断是不是环+求环位置+求环长度 以图片为例,假设环入口距离链表...

  • c语言判断链表是否有环

    1.问题描述 判断给定的链表中是否有环。如果有环则返回true,否则返回false。 数据范围:链表长度 ,链表中...

  • leetcode 141 判断链表中是否有环

    题目描述 给定一个链表,判断链表中是否有环。 进阶: 解题思路 无环链表,最后一个节点为nil,有环链表可以无限循...

网友评论

    本文标题:两个无限长度链表(也就是可能有环) 判断有没有交点

    本文链接:https://www.haomeiwen.com/subject/ztcwbxtx.html