前言:小伙伴们好久不见啦,上篇文章我们一起学习了数据结构线性表其一的单链表,了解了单链表的不少好处,但是不可能有完美的数据结构,就算是单链表,也会有很多缺点。那么今天这篇文章,我们就来学习单链表的promax版本——带头双向循环链表。一.什么是带头双向循环链表关于带头双向循环链表,我们将它拆分为带头、双向、循环、链表四个部分,其中链表我们已经知道是怎么回事了,那我们就来一起结合下图分析前三个概念。1.带头 所谓带头,也就是在链表的开头处,有一个不存放任何数据的头节点,我们通常称其为“哨兵位”。 那么哨兵位存在的意义是什么呢??? 它可以帮助我们更方便
文章目录💡题目分析💡解题思路🚩思路1:暴力求解---遍历🔔接口源码:🚩思路2:空间换时间🔔接口源码:🚩思路3:双指针(快慢指针)🔔接口源码:题目链接👉LeetCode27.移除元素👈💡题目分析给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用O(1)额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。💡解题思路🚩思路1:暴力求解—遍历直接一个循环遍历nums数组每个元素;再对每个元素判断是否和val相等;相等就把后面的元素往前挪动覆盖它,已达到删除val的目的;🚨注意:移
*********************************************************************************************************本文作者科大MF22某班Noah懒羊羊同学,为大家提供一个作业思路,请勿直接copy!!!一起进步学习~**********************************************************************************************************目录1.问题的描述1.1基本功能1.2健壮性1.3规范性2.算法的描述2
目录前言1.双向链表 带头双向循环链表的结构2.链表的实现2.1初始化2.2尾插2.3尾删2.4头插2.5头删2.6在pos位置之前插入2.7删除pos位置3.双向链表完整源码List.hList.c前言在上一期中我们介绍了单链表,也做了一些练习题,在一些题中使用单链表会十分繁琐。因为单链表只能正着走,不能倒着走,例如:回文、逆置。本期我们将学习带头双向循环链表。1.双向链表 带头双向循环链表的结构 特点:带头双向循环链表结构最复杂,一般用在单独存储数据。结构虽然结构复杂,但是使用代码实现以后会发现结构会带来多优势,实现反而简单了。2.链表的实现2.1初始化LTNode*LTInit(){ L
回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。写一个算法判定给定的字符序列是否为回文。(提示:将一半字符入栈)。输出结果: 主要算法: //字符串一半入栈比较intCompare(charx[]){ SqStacks; InitStack(s); intn=int(strlen(x)); //将前一半字符串入栈 for(inti=0;i 完整代码: #includeusingnamespacestd;//定义顺序栈#defineMAXSIZE20typedefstruct{ char*base; char*top; intstacksize
题目:给你单链表的头节点head,请你反转链表,并返回反转后的链表。示例1:输入:head=[1,2,3,4,5]输出:[5,4,3,2,1]示例2:输入:head=[1,2]输出:[2,1]示例3:输入:head=[]输出:[]提示:链表中节点的数目范围是[0,5000]-5000分析:本道题,需要考虑两种情况:**第一种:**链表为空,反转链表依然是一个空链表。**第二种:**链表不为空,需要反转:定义三个指针n1,n2,n3,分别指向NULL,head,head->next通过n2来遍历链表,n3先到结尾,为空时,此时链表还没有遍历结束,还没有实现全部反转实现反转:n2->next=n1
1.A+B题目输入两个整数,求这两个整数的和是多少。输入格式输入两个整数A,B,用空格隔开输出格式输出一个整数,表示这两个数的和数据范围0≤A,B≤108样例输入:34样例输出:7AC代码C:#includeintmain(){inta,b;scanf("%d%d",&a,&b);printf("%d\n",a+b);return0;}2.栈题目栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表。栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进栈)。栈的重要性不言自明,任何一门数据结构的课程都会介绍栈。宁宁同学在复习栈的基本概念时,想到了
个人主页:兜里有颗棉花糖欢迎点赞👍收藏✨留言✉加关注💓本文由兜里有颗棉花糖原创收录于专栏【手撕算法系列专栏】【Leetcode】🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助🍓希望我们一起努力、成长,共同进步。点击直接跳转到该题目目录1️⃣题目描述2️⃣题目解析3️⃣解题代码1️⃣题目描述给你一个mxn的矩阵mat和一个整数k,请你返回一个矩阵answer,其中每个answer[i][j]是所有满足下述条件的元素mat[r][c]的和:i-kj-k(r,c)在矩阵内示例1:输入:mat=[[1,2,3],[4,5,6],[7,8,9]],k=1输出:[[12,2
1.判断是否带环:用快慢指针slow指针一次走一步,fast指针一次走两步当两个指针相遇时,链表带环;两个指针不能相遇时,当fast走到倒数第一个节点或为空时,跳出循环返回空指针。那么slow指针一次走一步,fast指针一次走两步是否一定能追上呢?fast永远比slow快一步,所以两者之间每走一次举例减少1即N-1,N-2,N-3…0那么fast一次走三步,slow一次走一步呢?2.找第一个入环节点:假设环的节点数为C,环之外的节点数是L这里可以分为三种情况:N是偶数——>slow走第一圈追上N是奇数,C-1是偶数——>一定能追上N是奇数,C-1是奇数呢?推导:3L=L+n*C-N2L=n*C
LeetCode|面试题02.02.返回倒数第k个节点OJ链接思路:定义两个快慢指针,让快指针先提前走k个节点,然后再让慢结点和快结点一起走,当快指针==NULL时,慢指针就是倒数第k个节点代码如下:intkthToLast(structListNode*head,intk){structListNode*slow,*fast;slow=fast=head;while(k--){if(fast==NULL)returnNULL;fast=fast->next;}while(fast!=NULL){slow=slow->next;fast=fast->next;}returnslow->val;