草庐IT

链表OJ题

全部标签

数据结构OJ题

目录1.字符串左旋 2.字符串旋转结果3.旋转数组4.移除元素本篇主要是讲解一些OJ题目。1.字符串左旋 字符串左旋实现一个函数,可以左旋字符串中的k个字符例如:ABCD左旋一个字符得到BCDAABCD左旋两个字符得到CDAB方法1【暴力求解】翻转1个字符创建一个中间变量tmp,用于存储翻转的字符把后面的字符向前覆盖移动把tmp存储的字符放到结尾翻转k个字符,循环k次即可 注意如果旋转超出数组的元素个数范围,需要现处理一下。k=%len#includevoidleft_move(char*arr,intsz,intk){ inti=0; for(i=0;i方法2【三步翻转】左边逆序右边逆序整体

侵入式链表,内核链表

链表数组使用一块连续的存储单元来存储数据,而链表是用一组任意地址的存储单元来存储数据,且链表的长度是不固定的,这一特点使其可以非常方便地实现节点的插入和删除操作。链表的每个元素称为一个节点,每个节点都可以存储在内存中的不同的位置,为了表示每个元素与后继元素的逻辑关系,以便构成“一个节点链着一个节点”的链式存储结构。除了存储元素本身的信息外,还要存储其直接后继信息。因此,每个节点都包含两个部分,第一部分称为链表的数据域,用于存储元素本身的数据信息,这里用data表示,它不局限于一个成员数据,也可是多个成员数据。第二部分是一个结构体指针,称为链表的指针域,用于存储其直接后继的节点信息,这里用nex

【JavaScript】leetcode链表相关题解

【JavaScript】leetcode链表相关题解一、什么是链表?二、Javascript中的链表三、leetcode相关链表2.两数相加237.删除链表中的节点206.反转链表💎个人主页:阿选不出来💎个人简介:大三学生,热爱Web前端,随机掉落学习碎片💎目前开发的专栏:JS🍭Vue🍭React🍭💎祝愿今天的你比昨天更加博识了!一、什么是链表?链表的官方定义:链表是一种物理存储单位上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。看到这里,相信你肯定一知半解。没关系,接下来我们将链表与我们熟悉的数组进行一个对比,就好理解多了!存储数据方面:数组:使用一块连续的内

相交链表-力扣

一、题目描述题目链接:力扣(LeetCode)官网-全球极客挚爱的技术成长平台 二、题解  注意题目所说的相交,相交节点不只是数值上的相等,而是相交以后两条链变成一条链。解决改题目,我们可以:1、先求出两条链表的长度,然后求出长度的差值len;2、定义两个节点pl、ps,让pl节点始终指向较长的那个链表,ps节点始终指向较短的那个链表,并且一开始,两个节点均指向链表的头节点;3、让指向较长链表的pl节点先走差值len步,然后pl、ps两个节点一起走,直到两个节点相遇,此时分两种情况:pl=null,即两个链表不相交,返回nullpl不为空,则此时pl所指节点正是所求的相交节点 三、代码 pub

上机实验二 设计单循环链表 西安石油大学数据结构

实验名称:设计单循环链表(1)实验目的:掌握线性表的链式存储结构;掌握单循环链表及其基本操作的实现。(2)主要内容:实现单循环链表的初始化、求数据元素个数、插入、删除、取数据元素等操作;用插入法建立带头结点的单循环链表;设计一个测试主函数验证所设计单循环链表的正确性。1.实验目的掌握线性表的链式存储结构;掌握单循环链表及其基本操作的实现。2.问题描述利用C语言设计实现单循环链表,并实现初始化、求数据元素个数、插入、删除、取数据元素等基本操作。使用插入法建立带头结点的单循环链表,并设计一个测试主函数验证所设计单循环链表的正确性。3.基本要求具体要求如下:设计一个结构体表示链表的节点,包括数据域和

解剖—单链表相关OJ练习题

目录一、移除链表元素二、找出链表的中间节点 三、合并两个有序链表四、反转链表五、求链表中倒数第k个结点六、链表分割七、链表的回文结构八、判断链表是否相交  九、判断链表中是否有环(一)十、 判断链表中是否有环(二)注:第六题和第七题牛客没有C环境,我在C++环境下用C语言写这道题(目前还没学C++,请大佬们理解一下,理解万岁!!) 一、移除链表元素203.移除链表元素-力扣(LeetCode)给你一个链表的头节点 head 和一个整数 val 请你删除链表中所有满足 Node.val==val 的节点,并返回 新的头节点 。示例1:​输入:head=[1,2,6,3,4,5,6],val=6输

数据结构之手撕链表(讲解➕源代码)

0.引言我们在学习过顺序表之后,会发现两点不是很优秀的操作:1.顺序表的头插和中间的插入,头删和中间的删除:        需要不断的覆盖数据,时间复杂度是O(n),当我们的顺序表存入100w个数据的时候,花费的时间是非常之多的。2.动态开辟空间:    a.一般动态开辟的空间都是以2倍的形式开辟,当我们已经开辟了100个空间,并且存满了,此时我们还需要存放5个数据,那么就又需要开辟200个空间了,我们存放5个数据之后,还剩余了195个空间没有放数据,这也就导致了空间的浪费。      b. 而且我们开辟新空间,拷贝数据,释放旧空间还会有一定的消耗。注意⚠️⚠️⚠️:     我们在申请空间的

【LeetCode力扣】234 快慢指针 | 反转链表 | 还原链表

 目录1、题目介绍2、解题思路2.1、暴力破解法2.2、快慢指针反转链表 1、题目介绍原题链接: 234.回文链表-力扣(LeetCode)示例1:输入:head=[1,2,2,1]输出:true 示例2:输入:head=[1,2]输出:false 提示: 链表中节点数目在范围[1,10^5] 内0进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?2、解题思路判断回文,就是判断是否是对称的。有些朋友对于数组的回文判断非常熟悉,但是对链表的回文判断可能就无从下手了,其实都一样的。有一种非常简单的方式就是将链表转化成数组,然后就是判断该数组是否回文就可以了,这种方式统称暴力破解

C语言实现链表基本操作

目录一、什么是链表二、为什么要使用链表三、链表相关知识四、链表实现1.定义结构体2.创建链表3.遍历链表4.判断链表是否为空5.计算链表长度6.插入一个数据7.删除数据8.全部代码一、什么是链表如果把数据比喻成珠子,指针就是线,链表通过指针这条线就是把数据这些珠子串起来。二、为什么要使用链表数组是我们接触c语言时学到的一种重要的数据存储方式,是连续的,可以快速查找某个位置的数据。都是要对数组实现删除和插入等功能时,需要移动大量的数据,耗时长。而且数组使用前就分配好内存,分配的内存过小可能不够用,过大就造成浪费。而链表实现对数据删除和插入的功能时具有优势,而且可以要用时才分配,可以说基本不存在内

HAUE河工计院OJ1001 - 1050题解

目录1001:a+b1002:分铅笔 1003:求圆的面积 1004:正整数的位数 1005:英文字母的字母表位序 1006:两个整数的四则运算 1007:三位数的数位分离 1008:压岁钱存款 1009:等差数列求和 1010:输出字符ASCII码值的2倍 1011:虫子吃苹果1012:三个整数的和1013:身份证求出生日期1014:鸡兔同笼 1015:计算时间1016:计算国民生产总值增长倍数 1017:计算贷款还款时间 1018:交换变量  1019:译密码(一) 1020:从小到大输出三个整数 1021:positive,negative,orzero 1022:龟兔赛跑1023:一元