草庐IT

链表OJ题

全部标签

链表-oj题

 1.返回倒数第k个节点题解:定义两个快慢指针或着快慢变量。1.让fast先走k-1步  2.fast走完,在跟show一起走3. 走到fast.next==null结束,返回show.val publicintkthToLast(ListNodehead,intk){if(k0||head==null){return-1;}ListNodefast=head;ListNodeshow=head;//fast先走k-1步while(k-1!=0){fast=fast.next;if(fast==null){return-1;}k--;}//fast、show一起走while(fast.next

力扣 138. 随机链表的复制

题目描述:给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。例如,如果原链表中有 X 和 Y 两个节点,其中 X.random-->Y 。那么在复制链表中对应的两个节点 x 和 y ,同样有 x.random-->y 。返回复制链表的头节点。

[LeetCode]-160. 相交链表-141. 环形链表-142.环形链表II

目录160.相交链表 题目思路代码 141.环形链表 题目思路代码142.环形链表II题目思路代码160.相交链表160.相交链表-力扣(LeetCode)https://leetcode.cn/problems/intersection-of-two-linked-lists/description/ 题目给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 。示例:structLis

LinkedList与链表

目录一、Arraylist的缺陷二、链表    2.1链表的概念和结构    2.2链表的实现三、链表面试题    3.1 删除链表中所有值为val的节点    3.2 反转一个单链表     3.3 链表的中间节点    3.4 将有序链表合并    3.5 输出倒数第k个节点    3.6 链表分割    3.7 链表的回文结构      3.8 找两个链表的公共节点    3.9 判断链表是否有环    3.10 找链表入环的第一个节点四、LinkedList的模拟实现五、LinkedList的使用    5.1什么是LinkedList    5.2LinkedList的使用六、Arr

数据结构初阶---复杂度的OJ例题

复杂度的OJ例题一、消失的数字1.思路一2.思路二3.思路三二、旋转数组1.思路一2.思路二3.思路三一、消失的数字数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(N)时间内完成吗?链接:力扣:消失的数字1.思路一排序+遍历:如果下一个数据不等于上一个数据加1,那么下一个数据就是那个消失的数字。时间复杂度:O(N*LogN)由于这个时间复杂度时间复杂度过高,本思路不再冗余,赘述。2.思路二利用等差数列公式:从0加到n,然后再减去这个数组中的所有数字,那么最终所得的差就是缺失的数字。时间复杂度:O(N)代码如下:#includeintmissing

【数据结构】顺序表和链表

顺序表和链表1.线性表线性表(linearlist)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。2.顺序表2.1概念及结构顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。顺序表一般可以分为:\1.静态顺序表:使用定长数组存储元素。\2.动态顺序表:使用动态开辟的数组存储。2.2接口实现静态顺序表只适用于确定知道

【数据结构】单链表OJ题

前言:本节博客将讲解单链表的反转,合并有序链表,寻找中间节点及约瑟夫问题文章目录一、反转链表二、合并有序链表三、链表的中间结点四、环形链表的约瑟夫问题一、反转链表要反转链表,我们需要遍历链表并改变每个节点的next指针,使其指向其前一个节点。为了完成这个任务,我们需要三个指针:prev、cur和next_node。prev:保存当前节点的前一个节点。初始化为NULL,因为链表的新头部(原始链表的尾部)的next指针将指向NULL。cur:表示当前正在处理的节点。next_node:保存当前节点的下一个节点。structListNode*reverseList(structListNode*he

代码训练录训练营day04 | 链表part2 | 环形链表II

题目链接🔗:环形链表II 题意:给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。如果pos是-1,则在该链表中没有环。说明:不允许修改给定的链表。 思路:从两个方面考虑:1、是否有环2、如果有环,找到环的入口判断是否有环的思路是定义快慢指针,慢指针每次移动一步,快指针每次移动两步,快慢指针如果在环内相遇则链表有环,如果没有相遇则链表无环有环之后,来找环的入口,假设从头结点到环形入口节点的节点数为x。环形入口节点到fast指针与slow指针相遇节点节点数为y。从相遇节点再到环形入口节点

【数据结构】单链表之--无头单向非循环链表

前言:前面我们学习了动态顺序表并且模拟了它的实现,今天我们来进一步学习,来学习单链表!一起加油各位,后面的路只会越来越难走需要我们一步一个脚印!💖博主CSDN主页:卫卫卫的个人主页💞👉专栏分类:数据结构👈💯代码仓库:卫卫周大胖的学习日记💫💪关注博主和博主一起学习!一起努力!单链表今天我们要实现的全部功能就如下所示,功能很多我们一步一步来,一起来手撕链表吧!加油!typedefintSLNDataType;typedefstructSList{ intval; structSList*next;}SLNode;//单链表的打印voidSLTPrint(SLNode*phead);//单链表的尾插

LeetCode | 206. 反转链表

LeetCode|206.反转链表OJ链接这里有两个思路我们先来看第一个思路:创建一个新的链表,然后将原链表头插头插需要保存下一个的地址,再头插代码如下:structListNode*reverseList(structListNode*head){structListNode*cur=head;structListNode*newHead=NULL;while(cur){structListNode*next=cur->next;//头插cur->next=newHead;newHead=cur;cur=next;}returnnewHead;}思路二:这个思路二,就是定义三个指针,n1,n