链表传一级指针以及leetcode做题有感

上个文章说要传二级指针,经过一段时间的学习之后才知道可以传一级指针:

之所以要传二级指针,是要改变一级指针的值,也就是把头节点的指针改变,如图:

从左边到右边,头指针 一级指针plist 的值发生改变所以要传二级指针。

        首先,我们要搞明白一个事情:如果头指针不发生改变,只改变中间链表的成员,那是否可以只传一级指针呢?答案是:可以。

        就拿plist后的第一个成员举例,我们创建了一个链表,plist指向了第一个成员的地址,也就是找到了第一个结构体(并非拷贝),当然可以改变第一个成员的元素,也就是可以从根本上改变这个链表成员的指向。

        解决了这个问题,如果要求头指针改变应该怎么办,我们可以返回新的头指针,所以就有了以下代码:这两种的函数都能起到相同的作用。

struct stu* SeqListPushBack(stu* plist, StructType num);
//记得 return new_head
void SeqListPushBack(stu** plist, StructType num);

接下来是leedcote做题的感受:每次做 leetcode 都感觉自己像个傻子。

有些链表题的经验总结一下:

1.一个探路一个指路:

        类似于这种简单删除的操作,需要验证pointer->number的值,根据真假来修改pointer_pre->next来修改链表的指向,通常会出现如下代码:

while(pointer==NULL){
pointer_pre=pointer;
pointer=pointer->next;
}

在上面的代码中,pointer_pre保存了pointer的值,接着pointer迭代一下。 

2.一个指路一个记路:

 

        如图所示,在翻转链表中,pointer 其实担任了指路和记路两个任务,因为 pointer->next 既要指向pointer_pre 同时也要遍历链表,但是 pointer->next 的值一旦改变就无法找到下一个链表成员,所以要先把链表成员的地址存起来,即 pointer_over=pointer->next,所以可能出现下面的代码:

        第一行代码是先把三个指针安排好位置,然后反转链表指向,最后两行和第一行保证三个指针迭代向前一个单位。

struct ListNode* reverseList(struct ListNode* head){
struct ListNode*pointer=head,*pointer_over=head,*pointer_pre=NULL;
while(pointer_over!=NULL){
pointer_over=pointer->next;
pointer->next=pointer_pre;
pointer_pre=pointer;
pointer=pointer_over;
}
return pointer_pre;
}

做链表的题一定要考虑指针的移动逻辑和指向改变逻辑,确保两者不冲突的有序进行。

        这就是文章的全部内容,希望对你有所帮助,如有错误欢迎讨论。

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

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

相关文章

JS stacktrace 堆内存耗尽

javascript 堆内存耗尽 问题 是 npm run dev 的时候 报错 如下 <--- JS stacktrace --->FATAL ERROR: MarkCompactCollector: young object promotion failed Allocation failed - JavaScript heap out of memory在大多数情况下&#xff0c;默认情况下 Node.js 的堆内存…

【Cocoapods】最新安装指定版本Cocoapods记录

安装ruby https://blog.csdn.net/mydo/article/details/126918391 # 指定版本安装 sudo gem install -n /usr/local/bin cocoapods -v 1.9.3 接下来一定要注意&#xff01;注意&#xff01;注意&#xff01; 如果你的 Mac系统是 10.11 之前&#xff0c;输入&#xff1a; sud…

深入理解Transformer技术原理 | 得物技术

谷歌在2017年发布Transformer架构的论文时&#xff0c;论文的标题是&#xff1a;Attention Is All You Need。重点说明了这个架构是基于注意力机制的。 一、什么是注意力机制 在深入了解Transformer的架构原理之前&#xff0c;我们首先要了解下&#xff0c;什么是注意力机制。…

vulfocus靶场redis 未授权访问漏洞之CNVD-2015-07557

目标系统的权限不够redis用户无法写计划任务和公钥&#xff0c;而且也没有开放ssh端口。 主从复制getshell&#xff0c;写入恶意的so文件达到执行系统命令的目的。 github上有一键可以利用的脚本 https://github.com/n0b0dyCN/redis-rogue-server.git 利用条件&#xff1a;需…

二维数组在内存中的行存储和列存储

目录 例题&#xff1a; 0. BaseAddress 1. 行存储方式&#xff08;Row-major order&#xff09; 2. 列存储方式&#xff08;Column-major order&#xff09; 3. 解方程找到 i 和 j 行存储和列存储方式的区别 行存储方式&#xff08;Row-major order&#xff09;: 列存储…

逆向案例二十八——红某点集登录接口逆向序

网址&#xff1a;aHR0cHM6Ly93d3cuaHJkanl1bi5jb20vIy9sb2dpbj9yZWRpcmVjdD0lMkZyZWFsVGltZUxpdmluZw 登录接口&#xff0c;发现两个参数加密&#xff0c;分别是pwd和sig,t很明显是时间戳。 观察pwd,发现很像md5加密&#xff0c;我输入的密码是123456&#xff0c;在在线加密网…

Oracle SQL - HAVING和分析函数的执行顺序

分析函数是基于最终的结果集进行开窗的&#xff0c;所以HAVING比分析函数先执行 ↓ 没有HAVING时&#xff0c;MAX(col3) over()是A2 SQL> WITH subq_a AS2 (SELECT A col1, A1 col2, 10 col33 FROM dual4 UNION ALL5 SELECT A col1, A1 col2, -5 col36 F…

day81 session会话 文件上传

知识点&#xff1a; session 文件上传 一 session 1&#xff09;session&#xff1a;会话 在服务器端存储信息 指客户与服务器的会话 当用户通过浏览器访问服务器的某个页面时&#xff0c;在服务器开辟一个内存空间session 每个session 有唯一的id 2&#xff09;session过期 …

C——文件操作

1.前言 为什么要使用文件呢&#xff1f; 文件是储存在电脑的磁盘中的&#xff0c;如果没有文件&#xff0c;我们写程序的数据就会存储在电脑的内存中&#xff0c;程序退出&#xff0c;操作系统就会收回内存&#xff0c;数据就丢失了等再次运行程序的时候&#xff0c;是看不到…

【春秋云镜】CVE-2023-43291 emlog SQL注入

靶场介绍 emlog是一款轻量级博客及CMS建站系统&#xff0c;在emlog pro v.2.1.15及更早版本中的不受信任数据反序列化允许远程攻击者通过cache.php组件执行SQL语句。 不感兴趣的可以直接拉到最后面&#xff0c;直接获取flag 备注&#xff1a;没有通过sql注入获取到flag&…

汇编语言——将DX,AX组成的32位数逻辑左移3位

data segment data ends stack segment stacktop label worddw 100 dup (?) stack ends code segmentassume cs:code,ds:data,ss:stack main proc farmov ax,datamov ds,axmov ax,stackmov ss,axlea sp,top;0000 0001 1100 1010 | 0000 0010 0001 1111;逻辑左移三位后&#xf…

基于SpringBoot框架的智慧食堂

采用技术 基于SpringBoot框架实现的web的智慧社区系统的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBootMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示效果 系统功能 系统首页 用户注册页面 菜品信息页面 …

spispio

SS:NSS( NOT SLAVE SELET )、CS( CHIP SELECT ) 同步&#xff1a;SCK引脚用于提供时钟信号&#xff0c;数据位的输出和输入都是在SCK的上升沿或下降沿进行&#xff0c;数据位的收发时刻因此得以确定。同步时序下时钟快慢或中途暂停都没问题。SCK相当于IIC通信下的SCL&#xff0…

Spark面试整理-如何在Spark中进行数据清洗和转换?

在Apache Spark中进行数据清洗和转换是数据处理流程中的一个重要步骤。这个过程涉及从原始数据中删除或修正不准确、不完整、不相关或不正确格式的数据,以及将数据转换成更适合分析的形式。以下是在Spark中进行数据清洗和转换的一些常见方法: 1. 读取数据 首先,需要从支持的…

Android 性能优化(七):APK安装包体积优化

包体积优化重要性 移动 App 特别关注投放转化率指标&#xff0c;而 App 包体积是影响用户新增的重要因素&#xff0c;而 App 的包体积又是影响投放转化率的重要因素。 Google 2016 年公布的研究报告显示&#xff0c;包体积每上升 6MB 就会带来下载转化率降低 1%&#xff0c; …

SpringBoot Jar包在CentOS7.x上注册成服务并开机启动

本文将介绍如何把SpringBoot Jar包在CentOS7.x上注册成服务并设置为开机启动。 在CentOS系统中&#xff0c;将Spring Boot应用程序打包成jar文件后&#xff0c;可以通过创建Systemd服务来将其部署为系统服务&#xff0c;并设置为开机启动。 以下是详细的步骤和说明&#xff1a…

直方图与核密度估计

技术背景 直方图是一种经常被用于统计的图形表达形式&#xff0c;简单来说它的功能就是用一系列的样本数据&#xff0c;去分析样本的分布规律。而直方图跟核密度估计(Kernel Density Estimation&#xff0c;KDE)方法的主要差别在于&#xff0c;直方图得到的是一个离散化的统计分…

【全开源】多功能完美运营版商城 虚拟商品全功能商城 全能商城小程序 智慧商城系统 全品类百货商城

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 完美运营版商城/拼团/团购/秒杀/积分/砍价/实物商品/虚拟商品等全功能商城 干干净净 没有一丝多余收据 还没过手其他站 还没乱七八走的广告和后门 后台可以自由拖曳修改前端UI页面 …

实名制重要性、PHP身份实名认证示例、身份证ocr识别核验

身份证丢失失&#xff0c;可能会被不法分子利用去贷款。虽然是被人冒名办理&#xff0c;客观上不承担责任&#xff0c;但会造成个人信用信息的困扰。因此&#xff0c;对于个人来讲&#xff0c;要妥善保管自己的身份证&#xff0c;避免不必要的麻烦。对于贷款机构来说&#xff0…

Aigtek功率放大器的使用方法有哪些

功率放大器是一种将小信号放大为大信号的电子设备&#xff0c;广泛应用于无线通信、音频系统、雷达等领域。在使用功率放大器时&#xff0c;需要注意以下几个方面&#xff1a; 电源供应&#xff1a;功率放大器需要提供稳定的电源供应以保证正常工作。通常情况下&#xff0c;功率…