1.4~1.5链表复习,代码操作(反转链表(用栈解决,双指针),删除链表指定元素),链表选择题,广义表

删除链表内指定范围的数

思路是双指针,定义两个指针,一个去找当前这个数满不满足要求,然后另一个定义为删除区间的起点 ,

当不满足时,两个指针同时向后移动;当满足时,前驱指针就不动了,不断的删掉当前的cur,直到为Nullptr或出了区间

node* del(int s, int e, node* head) {if (!head)return nullptr;node* pre = head, * cur = head->next;//pre表示区间起点,cur表示操作结点while (cur) {//只要不空就是还能操作if (cur->val <= s) {//当前的结点还不满足操作要求pre = cur;cur = cur->next;}//同时向后移动两个指针else {//满足一个要求if (cur->val < e) {//满足两个要求pre->next = cur->next;//删除掉当前的结点cur = cur->next;}else {break;}}}
}

反转链表

双指针

用一个指针,保存为当前遍历到的节点,再来一个指针为当前这个遍历到节点的前一个结点,

这个过程就相当于把链表拆成了两部分,一部分是已经反转好的链表,Pre为其头结点

另一部分为还未反转的原始链表,cur为其头结点,

算法的过程就是不断把未反转的链表的头结点转给反转的链表,让pre去接受

while(cur){//循环条件为,未反转的链表里还有元素,所以就是cur不为空,cur一旦为空就说明为反转的链表已经为空,就不用再反转了

node* temp=cur->next;//保存未反转链表的头结点

cur->next=pre;//把此时未反转链表的头结点接到反转链表上

pre=cur;//更新反转链表的头结点

cur=temp;//更新未反转链表的头结点

}

return pre;//最后返回反转链表的头结点pre

这个C不对,因为更新未排序链表以及已排序链表的顺序反了,应该先更新已倒序的,再更新未倒序的,否则就会导致下一个头结点直接被跳过 

用栈解决

由于栈可以先进先出,所以可以用栈去解决

import java.util.Stack;
public class Solution {
public ListNode ReverseList(ListNode head) {Stack<ListNode> stack= new Stack<>();//把链表节点全部摘掉放到栈中while (head != null) {stack.push(head);head = head.next;}if (stack.isEmpty())return null;ListNode node = stack.pop();ListNode dummy = node;//栈中的结点全部出栈,然后重新连成一个新的链表while (!stack.isEmpty()) {ListNode tempNode = stack.pop();node.next = tempNode;node = node.next;}//最后一个结点就是反转前的头结点,一定要让他的next//等于空,否则会构成环node.next = null;return dummy;
}
}

链表选择题

top指向栈的顶部,是空结点,然后让新插入的结点下一个指针指向它,

链栈的话,插入是要插入在头结点位置的,即TOP其实是相当于一个头结点的位置,往链栈里插元素,就是在往链表的第一个位置上放元素,所以是C的操作

就是说每个结点都会有两个链域,但是每个结点都会被一个链域唯一确定,除了根节点,所以一共2n个链域,有n-1是被用的,剩下n+1是没被用的

换个思路就是操场跑圈,相对速度为2,跑完一圈的步数为100/2=50 

A.单链表的没个节点都具有唯一的前驱节点和唯一的后继节点,所以当两个单链表存在相交的节点时,这两个链表则同时拥有这个节点,以及这个节点的所有后继节点,当这个公共节点是尾节点时,他们则只含有公共一个节点-------尾节点。 B.快慢指针是判断单链表是否有环的一种方法:两个指针,每次移动的步长为2叫做快指针,每次移动步长为1的指针叫做慢指针。快慢指针同时从头结点出发,当快指针率先到达NULL的时候,则说明此单链表中不存在环,当快指针追上慢指针的时候,说明此单链表中存在环。 C.有环的单向链表和无环的单向链表不能相交,因为当相交的时候,无环的单向链表也会被迫存在一个环,只不过这个环的”起点“可能不是原来单向链表的头结点。 4.两个单向链表之间相交可以存在环。 

两个。 一个每次走一步, 一次每次走两步, 会相遇就表示有环 

尾节点的后继指向头结点,而头结点不是尾节点的逻辑后继

注意是单链表而不是数组 

数组静态分配内存,链表动态分配内存; 数组在内存中连续,链表不连续; 数组元素在栈区,链表元素在堆区; 数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n); 

数组对象是放在堆内存中,引用是放在栈内存中

考虑两个极端,最少是1,即头部,最坏是尾部,要N,中间是线性平均,所以为D 

在位置I上删除是N-I,即区间I到N,只含一个端点

在位置I上添加是N-I+1,区间两端点都要 

C除头结点外D考虑空表或只有一个元素

删除元素,删除元素的话需要知道前一个元素的指针;要在指定位置插入,就需要知道指定位置的指针,要删除的话,就是让删除位置的元素前一个元素的指针不再指向它,而是指向空指针或它后面的元素,越过他就行;插入的话就直接在指定位置接上要插入的元素即可

单链表与单循环链表b

b

只需要找到被接的链表的尾部,一个OM,然后接的链表,只要头结点即可 

队列

往队列的队尾插入一个元素为入队,从队列的排头删除一个元素称为退队。初始时 front=rear=0 , front 总是指向队头元素的前一位置,入队一次 rear+1 ,退队一次 front+1 。队列队头队尾指针相同时队列为空。而带链的队列,由于每个元素都包含一个指针域指向下一个元素,当带链队列为空时 front=rear=Null ,插入第 1 个元素时, rear+1 指向该元素, front+1 也指向该元素,插入第 2 个元素时 rear+1 , front 不变,删除 1 个元素时 front+1 。即 front=rear 不为空时带链的队列中只有一个元素。故本题答案为 A 选项。 

奇怪的选择题

报错

这个需要注意,vector删除后,后续下标会自动往前走,而i++,所以就会导致4被空掉 

广义表

head返回第一个元素,原子,tail返回去掉第一个元素后的表,相当于括号往里缩一个单位 

是广义表以及递归广义表的原理。 广义表是由n个元素组成的序列,n是广义表的长度。 广义表的深度: 广义表中括号的最大层数叫广义表的深度。 F=(a,F)的长度为2,由于属于递归表,所以深度为无穷,F相当于一个无限的表(a,(a,(a,(...))))。 

F的长度为2,第一个元素是原子,第二个元素是F自身。

F的深度为∞。F=(a,F)=(a,(a,(a,(…))))

对任意一个非空的广义表,其表头可能是单元素,也可能是广义表,而其表尾一定是广义表。注意表尾的深度(即括号的嵌套层数),表尾是由除了表头以外的其余元素组成的广义表,所以,需要在表尾的直接元素外面再加一层括号。
广义表最基本的操作:取表头head(LS)与取表尾tail(LS)

例:LS=(a,(b,c,d))
head(LS)=a
tail(LS)=((b,c,d))
head(tail(LS))=(b,c,d)
tail(tail(LS))=()
head(head(tail(LS)))=b
tail(head(tail(LS)))=(c,d)
head(tail(head(tail(LS))))=c
tail(tail(head(tail(LS))))=(d)
head(tail(tail(head(tail(LS)))))=d
tail(tail(tail(head(tail(LS)))))=()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/607660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sqlmap性能优化

sqlmap性能优化 &#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f32d;&#x1f32d;&#…

SpringBoot多环境配置以及热部署

多环境配置 使用多环境配置的原因&#xff1a; 在SpringBoot项目的生命周期中&#xff0c;存在不同的环境&#xff0c;例如开发时的环境&#xff0c;测试时的环境&#xff0c;交付使用后的生产环境&#xff0c;每种环境的配置可能不一样&#xff0c;这种情况下可以通过多环境…

百元蓝牙耳机推荐有哪些?百元平价的开放式蓝牙耳机推荐

无论是通勤、运动还是休闲时刻&#xff0c;一款好的蓝牙耳机都能为我们带来优质的听觉体验&#xff0c;特别是在预算有限的情况下&#xff0c;如何选择一款性价比高的百元蓝牙耳机变得尤为重要&#xff0c;那么我就根据我的使用经验给大家伙推荐几款百元平价的开放式蓝牙耳机&a…

11.文件和异常

文件和异常 实际开发中常常会遇到对数据进行持久化操作的场景&#xff0c;而实现数据持久化最直接简单的方式就是将数据保存到文件中。说到“文件”这个词&#xff0c;可能需要先科普一下关于文件系统的知识&#xff0c;但是这里我们并不浪费笔墨介绍这个概念&#xff0c;请大…

轻松搞定!微信快速导出好友数据备份

作为一款集聊天、朋友圈、支付等功能于一身的应用&#xff0c;微信中存储了我们与朋友、家人和同事以及客户之间的重要沟通记录和联系方式。然而&#xff0c;如果不小心丢失了手机或者账号出现问题&#xff0c;这些宝贵的数据可能会永远丢失。为了避免这种情况的发生&#xff0…

【HarmonyOS4.0】第三篇-类web开发模式

【HarmonyOS4.0】第三篇-类web开发模式 一、鸿蒙介绍 课程核心 为什么我们需要学习鸿蒙&#xff1f; 哪些人适合直接转鸿蒙&#xff1f; 鸿蒙系统优势是什么&#xff1f; 课程内容 (1)为什么要学习鸿蒙 从行情出发&#xff1a; 美国商务部长访问中国&#xff0c;2023年…

工程部设备巡检管理的必要性!使用智能化设备巡检系统有什么好处?

随着科技的发展&#xff0c;智能化管理已逐渐成为企业提升效率、确保设备运行安全的重要手段。工程部作为企业内维护设施运行的关键部门&#xff0c;其巡检工作的重要性不言而喻。本文将探讨如何利用智能化技术优化工程部的设备巡检工作&#xff0c;以确保设备的及时有效维护。…

华媒舍:溯源媒体发稿,助推品牌快速突破

在当今残酷竞争的市场环境中&#xff0c;品牌的快速突破变成了公司发展的关键之一。溯源新闻媒体发稿作为一项强有力营销推广方式&#xff0c;为品牌快速建立名气、提升口碑品牌形象提供了重要适用。下面我们就详细介绍如何给品牌订制溯源新闻媒体发稿对策&#xff0c;并探讨其…

*5.1 Global Memory Bandwidth

并行程序的执行速度可能因计算硬件的资源限制而有很大差异。虽然管理并行代码和硬件资源约束之间的交互对于在几乎所有并行编程模型中实现高性能很重要&#xff0c;但这是一种实用技能&#xff0c;最好通过为高性能设计的并行编程模型中的实践练习来学习。在本章中&#xff0c;…

Springboot3(一、lambda、::的应用)

文章目录 一、使用lambda简化实例创建1.语法&#xff1a;2.示例&#xff1a;3.Function包3.1 有入参&#xff0c;有返回值【多功能函数】3.2 有入参&#xff0c;无返回值【消费者】3.3 无入参&#xff0c;有返回值【提供者】3.4 无入参&#xff0c;无返回值 二、类::方法的使用…

如何彻底卸载Edge

要彻底卸载Edge浏览器&#xff0c;你可以按照以下几种方法操作&#xff1a; 方法一&#xff1a;使用控制面板 点击任务栏的“开始”按钮&#xff0c;打开“控制面板”。在控制面板中&#xff0c;选择“程序和功能”。在程序列表中找到Edge浏览器&#xff0c;右键点击它并选择…

web左侧伸缩菜单栏/导航栏

效果展示&#xff1a; 百度网盘链接下载全部资源&#xff1a; http://链接&#xff1a;https://pan.baidu.com/s/1ZnKdWxTH49JhqZ7Xd-cJIA?pwd4332 提取码&#xff1a;4332 html/JQuery代码&#xff1a; <!DOCTYPE html> <html lang"zh"> <head&g…

网络通信(11)-C#TCP服务端封装帮助类实例

本文使用Socket在C#语言环境下完成TCP服务端封装帮助类的实例。 实例完成的功能: 服务器能够连接多个客户端显示在列表中,实现实时刷新。 服务器接收客户端的字符串数据。 选中列表中的客户端发送字符串数据。 在VS中创建C# Winform项目,编辑界面,如下: UI文件 name…

Java中SpringBoot组件集成接入【MQTT中间件】

Java中SpringBoot组件集成接入【MQTT中间件】 1.MQTT介绍2.搭建MQTT服务器1.Windows2.Ubuntu3.Docker4.其他方式3.mqtt可视化客户端MQTTX及快速使用教程4.SpringBoot接入MQTT1、maven依赖2、MQTT配置3、MQTT组件具体代码1.定义通道名字2.消息发布器3.MQTT配置、生产者、消费者4…

.NET学习教程一——.net基础定义+VS常用设置

一、定义 .NET分为.NET平台和.NET框架。 .NET平台&#xff08;厨房&#xff09;.NET FrameWork 框架&#xff08;柴米油盐酱醋茶&#xff09; .NET平台&#xff08;中国移动联通平台&#xff09;.NET FrameWork 框架&#xff08;信号塔&#xff09; .NET平台基于.NET Fra…

强化学习的数学原理学习笔记 - 值函数近似(Value Function Approximation)

文章目录 概览&#xff1a;RL方法分类值函数近似&#xff08;Value function approximation&#xff09;Basic idea目标函数&#xff08;objective function&#xff09;优化算法&#xff08;optimization algorithm&#xff09; Sarsa / Q-learning with function approximati…

学生备考哪款护眼台灯好?2024五款知名品牌强力推荐

最近应后台小伙伴要求&#xff0c;给大家测评一些护眼台灯产品&#xff0c;毕竟现在的孩子近视人数真的非常多&#xff0c;每五个孩子戴眼镜的就有三个了&#xff0c;日常学习中保护视力&#xff0c;由于很多学习时间都是在晚上&#xff0c;台灯成为了为陪伴学习不可或缺的搭档…

深度学习:图神经网络——在推荐系统中的应用

PinSage是工业界应用图神经网络完成推荐任务的第一个成功案例&#xff0c;其从用户数据中构造图&#xff08;graph&#xff09;的方法和应对大规模图而采取的实现技巧都值得我们学习。PinSage被应用在图片推荐类Pinterest上。在Pinterest中&#xff0c;每个用户可以创建并命名图…

TikTok电商年度洞察:出海到底“卖什么”?各国多类目爆款洞察,迅速掌握市场领先优势

很多卖家在尝试出海时&#xff0c;常面临两大核心痛点&#xff1a;一是“卖什么”&#xff0c;即选择何种商品进行销售&#xff1b;二是“怎么卖”&#xff0c;即如何通过有效的营销策略将商品销售出去。TikTok主打的内容电商模式&#xff0c;通过短视频和直播等形式&#xff0…

StampedLock锁探究

该锁提供了三种模式的读写控制&#xff0c;当调用获取锁的系列函数时&#xff0c;会返回一个long型的变量&#xff0c;我们称之为戳记(stamp),这个戳记代表了锁的状态。 其中try系列获取锁的函数&#xff0c;当获取锁失败后会返回为0的stamp 值。 当调用释放锁和转换锁的方法…