首页 > 其他分享 >链表

链表

时间:2023-08-13 17:45:41浏览次数:39  
标签:pre nxt 出圈 链表 数组 编号

链表的特点是用一组位于任意位置的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以不连续。链表是容易理解和操作的基本数据结构,它的操作有初始化、添加、遍历、插入、删除、查找、释放等。

P1996 约瑟夫问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题意:$ n $ 个人围成一圈,从第一个人开始报数,数到 $ m $ 的人出列,再由下一个人重新从 $ 1 $ 开始报数,数到 $ m $ 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈的人的编号。

思路:考虑开两个数组构建双向链表,第一个数组记录每一个人前面的那一个人的编号,记作 $ pre[i] = i - 1 $,另一个数组记录每个人后面的那一个人的编号,记作 $ nxt[i] = i + 1$,因为 $ n $个人围成一圈,所以,第 $ n $ 个人的后继为 $ 1 $,第 $ 1 $ 个人的前驱为 $ n $,即 $ pre[1] = n, nxt[n] = 1$。

 

标签:pre,nxt,出圈,链表,数组,编号
From: https://www.cnblogs.com/LDUyanhy/p/17626871.html

相关文章

  • 链表和数组的区别
    链表和数组的区别链表逻辑上相邻的元素在物理位置上不一定相邻。优点:插入、删除效率高,不需要一个连续的很大的内存缺点:查找某一个位置的元素效率低。数组优点:存取速度快缺点:1.整块连续空间,占很大内存。2.插入或删除数据效率低、不方便链表数组逻辑上相......
  • 力扣---23. 合并 K 个升序链表
    给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例1:输入:lists=[[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链表中得到。1->1->2->3->......
  • p5两链表相交问题和二叉树
    (本文大多从杀戒之声处来,就想着自己方便看)两链表相交问题所谓相交,是指两链表有某一内存地址相同,则为相交,判断有环无环,哈希表(set),第一次相同(单向链表)快慢指针,快走2,慢走1,快慢指针第一次相遇后,将快指针返回头节点,慢指针不动,快改为走1,看快慢节点是否能相遇,有环则一定会在入环节......
  • 【剑指Offer】25、复杂链表的复制
    【剑指Offer】25、复杂链表的复制题目描述:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)。解题思路:本题有以下三种解......
  • 【剑指Offer】16、合并两个排序的链表
    【剑指Offer】16、合并两个排序的链表题目描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解题思路:首先需要判断几个特殊情况,即判断输入的两个指针是否为空。如果第一个链表为空,则直接返回第二个链表;如果第二个链表为空,则直接......
  • 再论中位数:离线+链表法
    离线先得到整个序列,从最终开始倒推答案每次删掉一个数要么对中位数没有影响,要么向左/右移动一个为了确定要删除的元素在链表中的位置,使用map记录,重复删完更新向左向右可以按照删除的元素相对于中位数的位置确定,具体分类见代码#include<iostream>#include<cstdio>#include......
  • 线性表-链表的操作实现
    LinkList.h#ifndef__LINKLIST__H__#define__LINKLIST__H__#include<stdio.h>#include<stdlib.h>typedefstructLinkNode{ intdata; structLinkNode*next;}LinkNode;typedefstructLinkList{ LinkNode*head;}LinkList;////遍历链表voi......
  • 160. 相交链表
    给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。示例1:输入:intersectVal=8,listA=[4,1,8,4,5],listB=[5,6,1,8,......
  • LRU机制:哈希表+双向链表 [labuladong-刷题打卡 day9]
    今天的知识点LRU缓存机制的实现。学过计组都知道LRU算法(leastrecentlyused最近最少使用算法)是资源管理中的常用算法。那么他是如何实现的呢?LRU原理和Redis实现146.LRU缓存此题算是对LRU机制的一个简化。为了使查找删除在O(1)中实现,我们结合哈希表和双向链表各自在查找和......
  • 【代码设计】链表结构解决多流程校验
    目的 使用合理的代码设计,解决业务场景的中的实际问题。背景介绍 在实际的业务场景中,用户的一个操作行为,是否允许真正被执行,往往会涉及到多流程的校验,一旦有条件不满足将会被中止。以下面流程图为例:用户点击了打赏按钮,会进行是否有网络检查,没有网络,会有网络连接弹框,等待用户连接......