首页
学习
活动
专区
圈层
工具
发布

【链表问题】环形单链表约瑟夫问题

【要求】 输入:一个环形单向链表的头节点 head 和报数 m. 返回:最后生存下来的节点,且这个节点自己组成环形单向链表,其他节点都删除掉。...【难度】 士:★☆☆☆ 【解答】 方法1:时间复杂度为 O( n * m) 这道题如果不考虑时间复杂度的话还是挺简单的,就遍历环形链表,每遍历 m 个节点就删除一个节点,知道链表只剩下一个节点就可以了。...head = head.next; 17 } 18 } 19 return head; 20 } 由于有些手机可能会出现乱码问题...方法二:时间复杂度为 O(n) 这个方法的难度为: 校:★★★☆ 我们可以给环形链表的节点编号,如果链表的节点数为 n, 则从头节点开始,依次给节点编号,即头节点为 1, 下一个节点为2, 最后一个节点为...问题拓展 对于上道题,假设是从第 K 个节点开始报数删除呢? 又该如何解决呢?

1.3K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【链表】:链表的带环问题

    前言: 链表的带环问题在链表中是一类比较难的问题,它对我们的思维有一个比较高的要求,但是这一类问题分析起来也是很有趣的,下面我就给大家讲一下链表的带环问题,并且带上几个例题进行分析。...1.链表的分类: ●根据链表,单向,双向,带头,不带头,循环,不循环,可以把链表分成八种。虽然说有八种链表,但是常用的只有:不带头单向不循环链表,带头双向循环链表。...●但是今天我们要看的是不带头单向不循环,但是内部带环的问题。 2.判断链表是否带环?...【LeetCode】第141题-链接:https://leetcode.cn/problems/linked-list-cycle/description/ 问题描述: 实现代码: /** *...也就是说,fast和slow差了N个位置,当fast和slow都进环的时候,就变成了追击问题。

    24700

    链表经典问题

    一,环形链表约瑟夫问题 1,题目描述 编号为 1 到 n 的 n 个人围成一圈。从编号为 1 的人开始报数,报到 m 的人离开。 下一个人继续从 1 开始报数。...  1,题目描述 将两个升序链表合并为一个新的 升序 链表并返回。...新链表是通过拼接给定的两个链表的所有节点组成的。  示例 : 2,思路 这两个链表都是有序的,但两个链表的节点个数可能不相等。...我们可以创建一个新链表,让两个链表的值向比较后,将较小一个尾插在新链表上。 3,代码实现 /** * Definition for singly-linked list....我们可以创建两个链表,将原链表中小于x的节点尾插到小链表, 大于或等于x的节点尾插到大链表中。  3,代码实现 /** * Definition for singly-linked list.

    10210

    Tkinter 导致的无限循环问题

    在使用 Tkinter 时,出现无限循环问题通常与事件绑定、函数调用以及窗口更新循环的方式有关。...如果代码的某一部分引发了循环或递归调用,可能会导致无限循环或应用程序无响应。1、问题背景我有一个脚本,在添加了用于用户交互的文件查询框之前一直运行良好。...现在,它会不断重复询问问题,只有当强制使以下命令 (shutil.copy2) 崩溃(通过使输入/输出文件相同)时才退出。为什么会这样?...谨慎使用 update(),频繁的 update() 调用可能导致无限循环,应使用 after() 进行调度。...通过合理设计事件处理逻辑,可以避免无限循环,并确保 Tkinter 应用程序始终保持响应状态。如果你有具体的代码或错误信息,我可以帮助进一步调试。

    1.9K10

    经典的带环链表问题(链表补充)

    环形链表1 运用快慢指针的方法,fast ,slow从头节点出发,快指针走两步,慢指针走一步,若有环,快指针先进环,后续如果慢指针和快指针相遇,则链表带环。转换成了追击问题。...证明:假设链表就是有环,slow(1步)进环时,fast(两步)与slow的距离为N,追击过程中,每走一次,N都会-1,最后到0。本题的思想证明,距离为0就是追上了。...环形链表2 本题相较于第一个环形链表题,多了返回节点位置的步骤,所以最初思路也是通过快慢指针,快慢指针相遇,则证明有环存在,然后将两指针相遇点记为meet,再继续走,此时头节点也开始移动,meet与head...} return NULL; } 这种方法不容易想到,还有另外一种方法,将快慢指针相遇点newhead=meet->next,meet->next=NULL,此时从newhead开始,与原链表...head通过相交链表的思路求解。

    16810

    【链表】牛客网:环形链表的约瑟夫问题

    1.问题描述: 前言: 约瑟夫问题 有很多种解决办法,下面我们用链表进行解题 题目链接:环形约瑟夫问题(直接点击就可以了) 2.实现代码: ❗️注意: //题目是编写函数,外部已经存在节点结构体...//对节点里的成员进行初始化 node->val=x; node->next=NULL; //返回指向节点的指针 return node; } ⛳️2.创建环形链表函数...; for(;i<=n;i++) { ptail->next=BuyNode(i); ptail=ptail->next; } //使链表循环...ptail->next=phead; //返回链表的尾节点 return ptail; } 说明: 如果不在循环外面申请头结点,那么代码就会变成这样: ListNode...⛳️3.主函数 int ysf(int n, int m ) { // 创建带环链表,prev指向为尾节点,pcur指向头结点 //此时pcur报数为1 ListNode*

    17010

    【LeetCode&数据结构】单链表的应用——随机链表的复制问题、相交链表问题详解

    几乎都是接口型的题目,关于接口型和IO型的区别我们在本专栏的第一篇【LeetCode】力扣题——轮转数组、消失的数字、数组串联中就介绍过了,这里不再赘述,我们进入今天的力扣题目介绍—— 正文 一、随机链表的复制问题...138.随机链表复制 博主题解链接:原链表基础上拷贝节点、置random指针、断开新旧链表解决随机链表的复制 推荐大家可以直接去看博主在力扣上面写的题解,博主介绍的还是比较详细的。...二、相交链表问题 160.相交链表 博主题解链接:利用长度差求解相交链表 推荐大家可以直接去看博主在力扣上面写的题解,博主介绍的还是比较详细的。...结尾 往期回顾: 【牛客&LeetCode&数据结构】单链表的应用——移除链表元素问题、链表分割问题详解 【牛客&LeetCode&数据结构】单链表的应用——合并两个有序链表问题、链表的回文结构问题详解...【LeetCode&数据结构】单链表的应用——反转链表问题、链表的中间节点问题详解 【LeetCode】用双指针解决移除元素问题、合并两个有序数组求解 【LeetCode】力扣题——轮转数组、消失的数字

    10910

    链表的常见问题

    链表指针转动,很容易转晕,介绍其中有几个常见的技巧。 一.指针/引用含义 指针/引用,实际上都是存储所指对象内存。...三.哨兵 哨兵结点的链表叫做带头链表,这样节省判断head == null 四.边界条件 如果链表为空时,代码是否能正常工作? 如果链表只包含一个结点时,代码是否能正常工作?...如果链表只包含两个结点时,代码是否能正常工作? 代码逻辑在处理头结点和尾结点的时候,是否能正常工作? 链表结点位置,在头部,中部,尾部的相关操作,是否能正常工作?...五.常见问题 5.1 链表反转 注意:指针的反转 public void reverseList(){ Link resLink = null; Link prevLink = null...); if(fast == slow){ return true; } } return result; } 5.3 两个有序的链表合并

    26720

    【LeetCode&数据结构】单链表的应用——反转链表问题、链表的中间节点问题详解

    正文 一、反转链表问题 206.反转链表 博主题解链接:三指针解决反转链表问题 大家可以直接去看博主在力扣上面写的题解,还是比较详细的。...思路1:创建新链表,遍历原链表,将头节点插到新链表中—— 时间复杂度:O(N)。...二、链表的中间节点问题 876.链表的中间节点 博主题解链接:快慢指针求解单链表中间节点问题 大家直接去看博主在力扣上面写的题解也是可以的。...思路1:我们就去求链表总长度,总长度/2取整就是链表中间节点的位置。...结尾 往期回顾: 【LeetCode】用双指针解决移除元素问题、合并两个有序数组求解 【LeetCode】力扣题——轮转数组、消失的数字、数组串联 结语:本篇文章到这里就结束了,本文讲述的两道代码题并不适合

    16410

    单向环形链表--约瑟夫问题

    首先来看一个著名的约瑟夫(Josephu)问题 设编号为1,2,3......个人围坐一圈,约定编号为k(1<=k <= n)的人从1开始报数,数到m的那个人出列,紧接着他的下一位又从1开始报数,数到m的那个人又出列,以此类推,直到所有人出列为止,由此产出一个编号的序列 如何解决上述问题...这里就可以使用单向环形链表 大概思路如下 先创建一个有n个节点的环形单向环形链表,然后由k节点开始从1开始计数,当记到 m时,对应的节点从链表中删除(出列),然后再从被删除节点的下一个节点开始又从1开始计数...,接下来我们完成约瑟夫问题 约瑟夫问题 假设环形链表上有5个节点 设 k = 1 即从第一个节点开始计数 设 m = 2 即计数到m的那个节点出列,并记录其编号。...分析 这里涉及到一个问题,当我们出圈的时候,怎么把某个节点移除环形链表呢? 1.这里需要一个辅助指针helper,默认指向环形链表中的最后一个节点。

    49410

    环形链表的约瑟夫问题

    1.故事背景以及题目概述 通过这个例子,我们就应该大致了解这个环形链表的约瑟夫问题大致是干什么的,先说一个很简单的例子,比如有5个数据组成一个环形结构,每次数到2的数字自杀,最后这个环形链表只会保留一个数据...,具体如下图所示: 下面的就是牛客网的题目,这个题目表面上看比较委婉,把这个数字删除,其实其本质就是约瑟夫问题,下面我会拆解步骤为大家进行介绍解题思路。...就是我们想要解决这个约瑟夫问题,首先就需要创建一个环形的链表,这个链表肯定要有很多个节点,我们这步就是提前封装一个函数,我们在创建环形链表之后进行创建节点的时候可以直接调用这个函数; (1)我们想要创建节点就要开辟新的空间存放这个节点...count=0就会错过这个节点(可能表述不是很清晰,反正就是说pcur已经指向了一个节点,所以count应该初始化为1); (3)count==m就说明这个节点就是我们要删除的节点,这个节点就属于约瑟夫问题里面的报数节点...指向新的节点,这个时候新的节点就是我们的报数节点的上一个节点的next指针指向的位置,让后让count=1重新开始计数; (4)这个过程就按照这样依次进行循环,什么时候循环会结束呢,我们都知道,约瑟夫问题里面最后会剩下一个节点

    19010

    【牛客&LeetCode&数据结构】单链表的应用——移除链表元素问题、链表分割问题详解

    几乎都是接口型的题目,关于接口型和IO型的区别我们在本专栏的第一篇【LeetCode】力扣题——轮转数组、消失的数字、数组串联中就介绍过了,这里不再赘述,我们进入今天的力扣题目介绍—— 目录 正文 一、移除链表元素问题...1、思路 2、解题过程 3、代码演示 二、 链表分割问题详解 1、思路 2、解题过程 3、代码演示 结尾 正文 一、移除链表元素问题 203.移除链表元素 博主题解链接:创建新链表再尾插解决移除链表元素问题...二、 链表分割问题详解 这道题是牛客网上面的题目,因为也是链表专题的,博主就一并放到LeetCode专栏了。...我们自己输入一些值自测一下—— 当然还可能存在这种错误,不过这个跟内存超限没什么关系: 这个问题出在下图这里—— 不要写成greaterHead, 那就要报错了。...结尾 往期回顾: 【牛客&LeetCode&数据结构】单链表的应用——合并两个有序链表问题、链表的回文结构问题详解 【LeetCode&数据结构】单链表的应用——反转链表问题、链表的中间节点问题详解 【

    11410
    领券