c++的查漏补缺 1、函数指针
今天写链表的插入排序时遇到了一个问题
void InsertionSortList(ListNode* head, int n){if (!head||!head->next) return nullptr;auto dummy = new ListNode(-1);dummy->next = head;auto pre = head;auto cur = head->next;while (cur != NULL){auto tmp = dummy;if (pre->val > cur->val){ //pre 其实是已排序序列对尾那个元素的位置(属于已排序序列),如果当前元素比队尾元素小则说明需要将其插入到有序序列中;如果比队尾元素大就不用管它,因为他本来就是插在队尾后面的那个元素。while (tmp->next->val < cur->val) //从头开始比较tmp = tmp->next; // 在已排序序列中(前方部分),从头向后遍历,直至找到适合当前值的位置。找到时tmp指向的节点后面的位置是cur的位置,也就是tmp的val小于cur的val,tmp->next的val大于cur的val。pre->next = cur->next; //cur弹出当前序列cur->next = tmp->next; //确定cur的下一个元素tmp->next = cur; //确定cur前面的元素cur = pre->next; //处理下一个节点}else{ //pre的下一个元素可以直接放入有序序列中pre=pre->next;cur = cur->next;}}head = dummy->next;}
以上代码实际上是无法更改head的指的,因为此时这里的head只是原链表头head的一个复制,就是没有引用的形参,我一开始被他指针的外表迷惑了,认为只要传入指针就是对原内容进行修改了。但实际上我在日常使用时,使用指针修改的是这块地址上对应的变量的值,相当于指针的上一级的内容。
修改方案
1、使用指针的指针
void InsertionSortList(ListNode** phead, int n){ListNode* head = *phead;if (!head||!head->next) return ;auto dummy = new ListNode(-1);dummy->next = head;auto pre = head;auto cur = head->next;while (cur != NULL){auto tmp = dummy;if (pre->val > cur->val){ //pre 其实是已排序序列对尾那个元素的位置(属于已排序序列),如果当前元素比队尾元素小则说明需要将其插入到有序序列中;如果比队尾元素大就不用管它,因为他本来就是插在队尾后面的那个元素。while (tmp->next->val < cur->val) //从头开始比较tmp = tmp->next; // 在已排序序列中(前方部分),从头向后遍历,直至找到适合当前值的位置。找到时tmp指向的节点后面的位置是cur的位置,也就是tmp的val小于cur的val,tmp->next的val大于cur的val。pre->next = cur->next; //cur弹出当前序列cur->next = tmp->next; //确定cur的下一个元素tmp->next = cur; //确定cur前面的元素cur = pre->next; //处理下一个节点}else{ //pre的下一个元素可以直接放入有序序列中pre=pre->next;cur = cur->next;}}*phead = dummy->next;}
2、使用指针的引用
void InsertionSortList(ListNode*& head, int n){if (!head||!head->next) return ;auto dummy = new ListNode(-1);dummy->next = head;auto pre = head;auto cur = head->next;while (cur != NULL){auto tmp = dummy;if (pre->val > cur->val){ //pre 其实是已排序序列对尾那个元素的位置(属于已排序序列),如果当前元素比队尾元素小则说明需要将其插入到有序序列中;如果比队尾元素大就不用管它,因为他本来就是插在队尾后面的那个元素。while (tmp->next->val < cur->val) //从头开始比较tmp = tmp->next; // 在已排序序列中(前方部分),从头向后遍历,直至找到适合当前值的位置。找到时tmp指向的节点后面的位置是cur的位置,也就是tmp的val小于cur的val,tmp->next的val大于cur的val。pre->next = cur->next; //cur弹出当前序列cur->next = tmp->next; //确定cur的下一个元素tmp->next = cur; //确定cur前面的元素cur = pre->next; //处理下一个节点}else{ //pre的下一个元素可以直接放入有序序列中pre=pre->next;cur = cur->next;}}head = dummy->next;}
确实是很基础的内容了,之前一直在用python,对c++落下的有点多了,加油查漏补缺吧。
相关文章:
c++的查漏补缺 1、函数指针
今天写链表的插入排序时遇到了一个问题 void InsertionSortList(ListNode* head, int n){if (!head||!head->next) return nullptr;auto dummy new ListNode(-1);dummy->next head;auto pre head;auto cur head->next;while (cur ! NULL){auto tmp dummy;if (pre…...
uniapp+php服务端实现苹果iap内购的消耗性项目和非续期订阅项目,前后端代码加逻辑分析
前言:公司的项目app在上架苹果商店时发现人家要求里面的部分购买项目必须使用iap购买的方式,使用原本的微信支付方式审核不给通过,无奈只能重新研究这个东西。做起来还是有点麻烦,主要是网上的文章很少,不能直接硬抄。…...
【代码随想录】【算法训练营】【第11天】 [20]有效的括号 [1047]删除字符串中的所有相邻重复项 [150]逆波兰表达式求值
前言 思路及算法思维,指路 代码随想录。 题目来自 LeetCode。 day 11,周六,又开始变的困难了~ 题目详情 [20] 有效的括号 题目描述 20 有效的括号 解题思路 前提:括号匹配 思路:利用栈的后入先出特性…...
vue实现图片懒加载
在src中创建一个directives文件夹在里面创建一个lazy.js文件 在main.js中引入 import lazy from ./directives/lazy app.directive(lazy, lazy) 在app.vue中 <script setup lang"ts"> import { RouterLink, RouterView } from vue-router import HelloWorl…...
Python | Leetcode Python题解之第101题对称二叉树
题目: 题解: class Solution:# 在【100. 相同的树】的基础上稍加改动def isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:if p is None or q is None:return p is qreturn p.val q.val and self.isSameTree(p.left, q.ri…...
周报5.20~5.26
学习内容: 主要了解了Qt的信号和槽、ui页面布局、各类常见控件的使用、绘图事件以及文件操作的相关知识,并且完成相关案例的设计。练习代码了解了多层感知机、激活函数、多项式回归、高维线性回归、暂退法、分布偏移、深度学习计算等相关知识与代码案例…...
RDP方式连接服务器上传文件方法
随笔 目录 1. RDP 连接服务器 2. 为避免rdp 访问界面文字不清晰 3. 本地上传文件到服务器 1. RDP 连接服务器 # mstsc 连接服务器step1: 输入mstscstep2: 输入 IP, username, passwd 2. 为避免rdp 访问界面文字不清晰 解决方法: 3. 本地上传文件到服务器 step…...
网络信息安全
目录 引言 网络信息安全的基本概念 定义 主要目标 网络信息安全的范围 主要威胁 恶意软件 黑客攻击 拒绝服务攻击 社交工程 内部威胁 常用技术和防护措施 加密技术 防火墙 入侵检测和防御系统 访问控制 多因素认证 安全审计和监控 安全培训和意识提升 未来发…...
java中的对象
文章目录 一、对象的创建过程1.1 检查加载1.2 分配内存1.3 内存空间初始化1.4 设置对象头1.5 对象初始化 二、对象内存布局2.1 布局解析2.2 JOL使用 三、对象的访问定位3.1 句柄访问3.2 直接指针 四、对象的分配策略4.1 栈上分配4.2 优先分配到Eden区4.3 大对象直接进入老年代4…...
【MySQL精通之路】MySQL-环境变量
本节列出了MySQL直接或间接使用的环境变量。 其中大部分也可以在本手册的其他地方找到。 命令行上的选项优先于选项文件和环境变量中指定的值,选项文件中的值优先于环境变量中的值。 在许多情况下,最好使用配置文件而不是环境变量来修改MySQL的行为。…...
Day42 最后一块石头的重量Ⅱ + 目标和 + 一和零
1049 最后一块石头的重量Ⅱ 题目链接:1049.最后一块石头的重量Ⅱ 有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和…...
01.爬虫---初识网络爬虫
01.初识网络爬虫 1.什么是网络爬虫2.网络爬虫的类型3.网络爬虫的工作原理4.网络爬虫的应用场景5.网络爬虫的挑战与应对策略6.爬虫的合法性总结 1.什么是网络爬虫 网络爬虫,亦称网络蜘蛛或网络机器人,是一种能够自动地、系统地浏览和收集互联网上信息的程…...
集合、Collection接口特点和常用方法
1、集合介绍 对于保存多个数据使用的是数组,那么数组有不足的地方。比如, 长度开始时必须指定,而且一旦制定,不能更改。 保存的必须为同一类型的元素。 使用数组进行增加/删除元素的示意代码,也就是比较麻烦。 为…...
12. Web开发:介绍Web开发的基本概念,Servlet和JSP的使用,MVC设计模式的应用等。
Web开发的轻松入门之旅 想象一下,Web开发就像是搭建一个在线的小家,你既是设计师,又是建筑师,还是管家。我们一步步来探索这个过程,保证简单易懂,就像搭积木一样有趣! Web开发基础认知 Web开…...
文件系统--inode
文章目录 概述认识磁盘了解磁盘的存储结构对磁盘的存储结构进行逻辑抽象 操作系统对磁盘的使用宏观认识细节认识再谈目录再谈文件的增删 概述 文件有很多,但是被打开的文件很少,这些没有被打开的文件在磁盘中,这就叫做磁盘文件。每次先打开一…...
数据清洗(ETL)案例实操
文章目录 数据清洗(ETL)概述案例需求和分析代码实现和结果分析 数据清洗(ETL)概述 “ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(Extract)、转换&…...
Zookeeper 面试题(一)
1. ZooKeeper 适合哪些应用场景? ZooKeeper 是一个高性能、高可靠的分布式协调系统,它在分布式系统和大数据领域中有着广泛的应用。以下是 ZooKeeper 适合的一些应用场景: 数据发布/订阅:ZooKeeper 可以作为配置中心,…...
怎么安装django特定版本
要安装Django的特定版本,你可以使用Python的包管理工具pip。以下是在命令行中安装Django特定版本的步骤: 确保你的计算机上已经安装了Python和pip。如果没有安装,你可以从Python官方网站下载并安装最新版本的Python,pip通常会随Py…...
关于Broken pipe异常的一点学习记录
什么是Broken pipe? pipe,管道,管道里面自然就是数据,通过指从文件或网络套接字读取的数据。当一个进程试图向一个已关闭的管道(pipe)写数据或者从一个已关闭的通道读数据时就会出现中断,也就是Broken pi…...
第十一课,end关键字、简单while循环嵌套、初识for循环
一,end关键字 end关键字用于在print输出的内容后面声明结束的字符,我们之前学过并且十分了解print是默认输出内容之后跟着换行的,如果我们不希望换行而希望使用其它字符来代替换行,就可以用end关键字来实现 特殊的,en…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化
iOS 应用的发布流程一直是开发链路中最“苹果味”的环节:强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说,这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发(例如 Flutter、React Na…...
