爱上数据结构:顺序表和链表
一、线性表
线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使
用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...
线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,
线性表在物理上存储时,通常以数组和链式结构的形式存储。

二、顺序表的OJ题
1.原地移除数组中所有的元素val
27. 移除元素 - 力扣(LeetCode)
https://leetcode.cn/problems/remove-element/description/
int removeElement(int* nums, int numsSize, int val) {int scr=0,dst=0;while(scr<numsSize){if(nums[scr]==val){scr++;}else{nums[dst]=nums[scr];scr++;dst++;}}return dst;
}
在原数组上进行修改,等于val的跳过,不赋值。反之则赋值。
2.删除排序数组中的重复项
26. 删除有序数组中的重复项 - 力扣(LeetCode)
https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/
int removeDuplicates(int* nums, int numsSize) {if(numsSize==0){return 0;}int fast=1,slow=1;while(fast<numsSize){if(nums[fast]!=nums[fast-1]){nums[slow]=nums[fast];slow++;}fast++;}return slow;
}
对于这道题先处理特殊情况,如果numssize==0,则该数组没元素返回0。可以采用双指针法来实现,定义快慢指针,fast不等于fast-1对应下标的内容则让该fast对应的赋值给slow,再将slow++,
反之则就只让fast++,最后返回slow,slow前的数据都只出现了一次。
3.合并两个有序数组
88. 合并两个有序数组
https://leetcode.cn/problems/merge-sorted-array/
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {int l1=m-1,l2=n-1,l3=m+n-1;while(l1>=0&&l2>=0){if(nums1[l1]>nums2[l2]){nums1[l3]=nums1[l1];l3--;l1--;}else{nums1[l3]=nums2[l2];l3--;l2--;}}while(l2>=0){nums1[l3]=nums2[l2];l3--;l2--;}
}
按照题目要求本题本来就是要进行升序排序,对大的数据进行尾插操作,值得注意的是为什么需要对l2进行第二次循环呢?
因为&& 前真才会判断后面的,而如果前面就是假则直接判假跳过后面的了,所以需要对l2进行判断。
三、链表OJ题
在之前就已经写过一些有关链表的OJ题了,感兴趣的朋友可以去这个链接观看!!
学习c语言:单链表的应用-CSDN博客文章浏览阅读899次,点赞31次,收藏32次。单链表OJ题https://blog.csdn.net/bskmns/article/details/136591727?spm=1001.2014.3001.5501现在要对链表OJ题做些补充,准备发车了哦!!
1.链表分割
链表分割_牛客题霸_牛客网 (nowcoder.com)
https://www.nowcoder.com/practice/0e27e0b064de4eacac178676ef9c9d70?tpId=8&&tqId=11004&rp=2&ru=/activity/oj&qru=/ta/cracking-the-coding-interview/question-ranking
对于这个题,可以通过创建两个链表来进行分割,将小于x的数据尾插到less链表中,将大于x的数据尾插到great链表中。然后将less链表的未结点与great的头节点的next连接到一起,使链表连在一起,再将greattail置为空。返回lesshead->next.
/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) : val(x), next(NULL) {}
};*/
class Partition {
public:ListNode* partition(ListNode* pHead, int x) {// write code herestruct ListNode*greatHead,*greattail,*lessHead,*lesstail,*cur;greatHead=greattail=(struct ListNode*)malloc(sizeof(struct ListNode));lessHead=lesstail=(struct ListNode*)malloc(sizeof(struct ListNode));cur=pHead;while(cur){if(cur->val<x){lesstail->next=cur;lesstail=cur;cur=cur->next;}else{greattail->next=cur;greattail=cur;cur=cur->next;}} lesstail->next=greatHead->next;greattail->next=nullptr;return lessHead->next;}
};
2.链表的回文结构
链表的回文结构_牛客题霸_牛客网 (nowcoder.com)
https://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa?tpId=49&&tqId=29370&rp=1&ru=/activity/oj&qru=/ta/2016test/question-ranking
对于这个题,首先要找它的中间节点,使用快慢指针找中间节点,然后将slow后的链表进行逆置,然后将A与slow进行比较,以slow不等于A作为循环,如果值不相等就返回false,如果A的下一个等于slow就返回true,如果不是就将slow和A移到下一个。
/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) : val(x), next(NULL) {}
};*/
class PalindromeList {
public:bool chkPalindrome(ListNode* A) {// write code herestruct ListNode* slow=A;struct ListNode* fast=A;while(fast && fast->next){slow=slow->next;fast=fast->next->next;}struct ListNode* head=slow;while(head){struct ListNode*next=head->next;head->next=slow;slow=head;head=next;}head=A;while(slow!=A){if(A->val!=slow->val){return false;}if(A->next==slow){return true;}else{slow=slow->next;A=A->next;}}return true;;}
};
三、相交链表
160. 相交链表 - 力扣(LeetCode)
https://leetcode.cn/problems/intersection-of-two-linked-lists/两个链表找相交节点,如果一个链表为空则不存在相交节点,设置pa pb遍历链表,while循环如果pa不等于pb就进入循环,使pa和pb向后遍历,如果为空就返回headB headA,不为空就置为下一个。最后返回pa。
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {if(headA==NULL||headB==NULL){return NULL;}struct ListNode* pa=headA,*pb=headB;while(pa!=pb){pa=pa==NULL?headB:pa->next;pb=pb==NULL?headA:pb->next;}return pa;
}
四、环形链表
141. 环形链表 - 力扣(LeetCode)
https://leetcode.cn/problems/linked-list-cycle/在这个题中要判断该链表是否有环,可以通过快慢指针来进行实现,while循环fast&&fast->next
fast=fast->next->next slow=slow->next,每次fast多走一步,所以链表只要有环就一定可以实现判断(当slow==fast时 返回true),否则返回false。
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/
bool hasCycle(struct ListNode *head) {struct ListNode* slow=head,*fast=head;while(fast &&fast ->next){fast=fast->next->next;slow=slow->next;if(slow==fast){return true;}}return false;
}
好了,本期的内容到此结束,谢谢大家观看啊!!!
学习数据结构任重而道远,加油啊各位!!!

相关文章:
爱上数据结构:顺序表和链表
一、线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的一条…...
python知识点总结(十)
python知识点总结十 1、装饰器的理解、并实现一个计时器记录执行性能,并且将执行结果写入日志文件中2、队列和栈的区别,并且用python实现3、设计实现遍历目录与子目录4、CPU处理进程最慢的情况通常发生在以下几种情况下:5、CPU处理线程最慢的…...
【Python】探索 Python 编程世界:常量、变量及数据类型解析
欢迎来CILMY23的博客 本篇主题为 探索 Python 编程世界:常量、变量及数据类型解析 个人主页:CILMY23-CSDN博客 Python系列专栏:http://t.csdnimg.cn/HqYo8 上一篇博客: http://t.csdnimg.cn/SEdbp C语言专栏: htt…...
vue页面实现左右div宽度,上下div高度分割线手动拖动高度或者宽度自动变化,两个div宽度或者高度拉伸调节,实现左右可拖动改变宽度的div内容显示区
实现左右或者上下div两部分拖动,宽度或者高度自动变化,实现流畅平滑的变化,还可以是实现拖动到一定宽度就不让拖动了,如果你不需要最小宽度,就直接去掉样式就行 这是页面。分左中右三部分,中间我是用来作为拖动的按钮…...
知攻善防应急靶场-Linux(1)
前言: 堕落了三个月,现在因为被找实习而困扰,着实自己能力不足,从今天开始 每天沉淀一点点 ,准备秋招 加油 注意: 本文章参考qax的网络安全应急响应和知攻善防实验室靶场,记录自己的学习过程&am…...
ffmpeg命令行
ffmpeg 如果要在linux gdb 调试,需要在configure 时候不优化 开启调试 ./configure --enable-debug --disable-optimizations make如何开启gdb 调试 gdb ffmpeg_gset args -i test.hevc -c:v copy -c:a copy output_265.mp4rh264 的流生成mp4 文件,不转…...
VMware虚拟机更换引导顺序
前言 我用wmware装了黑群晖测试,将img转成vmdisk的格式之后发现系统引导盘之后1G,有点太小了 我准备把wmware的黑群晖系统迁移到新添加的虚拟磁盘里 1.登录黑群晖的SSH 请先在黑群晖的控制面板中的终端机和SNMP里面启用SSH功能,才能使用ss…...
RAFT:让大型语言模型更擅长特定领域的 RAG 任务
RAFT(检索增强的微调)代表了一种全新的训练大语言模型(LLMs)以提升其在检索增强生成(RAG)任务上表现的方法。“检索增强的微调”技术融合了检索增强生成和微调的优点,目标是更好地适应各个特定领…...
Stable Diffusion 本地训练端口与云端训练端口冲突解决办法
方法之一,修改本地训练所用的端口 1 首先,进入脚本训练器的根目录 例如:C:\MarkDeng\lora-scripts-v1.7.3 找到gui.py 2 修改端口号 因为云端训练器也是占用28000和6006端口 那么本地改成27999和6007也是可以的 保存退出,运行启动…...
C++学习day1
思维导图 定义自己的命名空间,其中有string类型的变量,再定义两个函数,一个函数完成字符串的输入,一个函数完成求字符串长度,再定义一个全局函数完成对该字符串的反转 #include <iostream> using namespace std;…...
openGauss CM
CM 可获得性 本特性自openGauss 3.0.0版本开始引入。 特性简介 CM(Cluster Manager)是一款数据库管理软件,由cm_server和cm_agent组成。 cm_agent是部署在数据库每个主机上,用来启停和监控各个数据库实例进程的数据库管理组件…...
北斗短报文+4G应急广播系统:实时监控 自动预警 保护校园安全的新力量
安全无小事,生命重如山。学生是祖国的未来,校园安全是全社会安全工作的一个重要的组成部分。它直接关系到青少年学生能否安健康地成长,关系到千千万万个家庭的幸福安宁和社会稳定。 灾害事故和突发事件频频发生,给学生、教职员工…...
2024河北石家庄矿业矿山展览会|河北智慧矿山展会|河北矿博会
2024中国(石家庄)国际矿业博览会 时间:2024年7月4-6日 地点:石家庄国际会展中心.正定 随着全球经济的持续增长和矿产资源需求的不断攀升,矿业行业正迎来前所未有的发展机遇。作为矿业领域的盛会&…...
ruoyi使用笔记
1.限流处理 RateLimiter PostMapping("/createOrder") ApiOperation("创建充值订单") RateLimiter(key CacheConstants.REPEAT_SUBMIT_KEY,time 10,count 1,limitType LimitType.IP) public R createOrder(RequestBody Form form) {//业务处理return …...
论文《Exploring to Prompt for Vision-Language Models》阅读
论文《Exploring to Prompt for Vision-Language Models》阅读 论文概况论文动机(Intro)MethodologyPreliminaryCoOp[CLASS]位置Context 是否跨 class 共享表示和训练 ExperimentsOverall ComparisonDomain GeneralizationContext Length (M) 和 backbon…...
科普 | Runes 预挖矿概念
作者:Jacky X/推:zxl2102492 关于 Runes 协议的前世今生,可以点击阅读这篇文章 👇 《简述 Runes 协议、发展历程及最新的「公开铭刻」发行机制的拓展讨论》 什么是传统预挖矿概念 这轮比特币生态爆发之前,预挖矿&…...
蓝桥杯真题Day40 倒计时19天 纯练题!
蓝桥杯第十三届省赛真题-统计子矩阵 题目描述 给定一个 N M 的矩阵 A,请你统计有多少个子矩阵 (最小 1 1,最大 N M) 满足子矩阵中所有数的和不超过给定的整数 K? 输入格式 第一行包含三个整数 N, M 和 K. 之后 N 行每行包含 M 个整数…...
Android 14.0 SystemUI下拉状态栏增加响铃功能
1.概述 在14.0的系统产品rom定制化开发中,在对systemui的状态栏开发中,对SystemUI下拉状态栏的QuickQSPanel区域有快捷功能键开关,对于增加各种响铃快捷也是常用功能, 有需要增加响铃功能开关功能,接下来就来分析SystemUI下拉状态栏QuickQSPanel快捷功能键开关的相关源码…...
docker学习笔记 二-----docker介绍
老套路哈,第一章先科普一下三种常见的云服务类型,第二和第三章节写docker学习笔记。 一 、IAAS、PAAS、SAAS IAAS (Infrastructure as a Service):基础即服务,供应商仅提供给用户最基础设施的服务资源,也就是服务器资…...
螺旋矩阵的算法刷题
螺旋矩阵的算法刷题 本文主要涉及螺旋矩阵的算法 包括三个题目分别是 59. 螺旋矩阵 II54. 螺旋矩阵 中等LCR 146. 螺旋遍历二维数组 文章目录 螺旋矩阵的算法刷题一 、螺旋矩阵简单1.1 实现一(我认为这个方法更巧妙!!)1.2 实现二&…...
通达信缠论画线主图实战:手把手教你5分钟搞定中枢识别与趋势线绘制
通达信缠论画线实战指南:5分钟掌握中枢识别与趋势线绘制技巧 在股票技术分析领域,缠论因其独特的结构思维和实战价值备受投资者青睐。而通达信作为国内主流证券分析软件,其内置的画线工具与缠论理论结合,能够帮助投资者快速识别关…...
马年开始杂谈补
总感觉时间越过越快,是不是年纪大了。马年春节9天假期,历史上最长春节,一眨眼就过去了。今年刚开始就发生了很多事,不知福祸。首先是人工智能发展迅速,各种智能体开始出现。美以伊战争,油价狂飙。到了3月&a…...
React Native PagerView入门指南:5分钟快速搭建页面切换组件
React Native PagerView入门指南:5分钟快速搭建页面切换组件 【免费下载链接】react-native-pager-view React Native wrapper for the Android ViewPager and iOS UIPageViewController. 项目地址: https://gitcode.com/gh_mirrors/re/react-native-pager-view …...
面试官:什么是最左前缀匹配?为什么要遵守?(修订版)
在线 Java 面试刷题(持续更新):https://www.quanxiaoha.com/java-interview面试考察点原理理解:面试官不仅仅想知道你会背 "最左前缀原则",更想考察你是否理解联合索引的 B 树存储结构,能否从数据…...
Pixel Mind Decoder 前端交互设计:基于 JavaScript 的情绪看板开发
Pixel Mind Decoder 前端交互设计:基于 JavaScript 的情绪看板开发 1. 情绪看板的应用场景与价值 在现代数字化产品中,理解用户情绪变得越来越重要。无论是社交媒体监测、客服系统优化,还是心理健康应用开发,能够实时分析并可视…...
3大核心方案破解戴森电池固件限制:让你的吸尘器重获新生
3大核心方案破解戴森电池固件限制:让你的吸尘器重获新生 【免费下载链接】FU-Dyson-BMS (Unofficial) Firmware Upgrade for Dyson V6/V7 Vacuum Battery Management System 项目地址: https://gitcode.com/gh_mirrors/fu/FU-Dyson-BMS 问题溯源:…...
新手避坑指南:雯雯的后宫-造相Z-Image-瑜伽女孩镜像部署全流程解析
新手避坑指南:雯雯的后宫-造相Z-Image-瑜伽女孩镜像部署全流程解析 1. 镜像概述与核心价值 雯雯的后宫-造相Z-Image-瑜伽女孩是一个专注于生成高质量瑜伽主题图像的文生图模型服务。基于Z-Image-Turbo底座并结合特定LoRA微调技术,该镜像能够生成风格统…...
Cursor试用限制如何解决?go-cursor-help工具三合一方案详解
Cursor试用限制如何解决?go-cursor-help工具三合一方案详解 【免费下载链接】go-cursor-help 解决Cursor在免费订阅期间出现以下提示的问题: Youve reached your trial request limit. / Too many free trial accounts used on this machine. Please upgrade to pro…...
Mac Mouse Fix终极指南:重新定义macOS鼠标交互体验的开源解决方案
Mac Mouse Fix终极指南:重新定义macOS鼠标交互体验的开源解决方案 【免费下载链接】mac-mouse-fix Mac Mouse Fix - A simple way to make your mouse better. 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 在macOS生态系统中࿰…...
保姆级教程:手把手配置GD32的RTC外部低速时钟(LXTAL)与内部IRC40K
GD32 RTC时钟源配置实战:从LXTAL到IRC40K的深度解析 在嵌入式开发中,实时时钟(RTC)模块的稳定运行往往决定了设备的时间记录精度和低功耗表现。作为GD32微控制器的重要外设之一,RTC模块支持多种时钟源配置方案,其中外部低速晶振(L…...
