对链表的头结点和各个指向结点的引用的理解。力扣24题,两两交换链表中的结点。

头结点

其实是知道在链表前面添加一个没有实际存储内容的头结点是有利于程序运行的,但是在实际编程中总是会忘记或者不知道到底起到什么样的作用,或许这就是纸上得来终觉浅,绝知此事要躬行吧。

力扣24题要求我们两两交换链表中的结点。题目链接如下:

. - 力扣(LeetCode)

在这种情况就很需要有一个头结点,因为考虑到交换两个头结点的时候往往不单单会只用到被交换的两个结点,往往还需要考虑被交换的第一个结点的前一个结点,因为也需要把它的next指针改变。如果设置待被交换的两个结点按顺序分别是cur和next,那么cur前面的结点就是叫pre。

对于pre,cur,next这三个结点,要交换cur和next结点,需要将pre指向next。next指向cur,cur指向next.next,需要用到三个结点。

而如果这个时候不使用头结点的话。

对于第一组要交换的两个结点,和后续组要交换的结点的操作就会不统一。试想一下,当我们处理第一组结点的时候,由于没有头结点,且作为链表头,确实不需要考虑它之前的结点,所以只需要交换cur和next数组,但是这样的处理逻辑在我们处理第二组待交换的结点的时候就会出现问题,因为除了第一组之后的每一组结点都是需要考虑pre结点的。

由于处理第一组结点没有pre结点,而处理后面组的结点需要pre结点,这就造成了处理逻辑的不统一,也就需要我们用一个判断来分开写两段不同的代码进行处理。这不就是会使我们的思考和代码变得很复杂吗?

指向结点的引用

给定一个链表。head指向第一个结点1。

1->2->3->4

当执行交换1和2结点之后,

ListNode tmp=head.next;head.next=head.next.nexttmp.next=head;

链表表现为如下形式:

2->1->3->4 

其中head还是指向1,所以在此时如果还是return head;来得到最终想要得到的结果值得话,就会得到一个错误得结果,错误结果为:

1->3->4 

从而把2给漏掉了。

所以这个时候head虽然名字是叫头,但是它得实际意义已经不再是指向链表头了,需要找到真正得链表头tmp,它才是最终想要的结果。 

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

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

相关文章

PotatoTool 蓝队版 V1.3 发布:增强功能和性能优化

一、简介 经过广大网友的反馈和建议,我们对V1.1版本中存在的问题进行了优化。其中,我们针对MD5库进行了本地化处理,以提高查询效率。然而,这也导致了软件体积的飙升。二、优化概述 1、兼容性 兼容arm架构系统 2、UI 2.1 界面…

Linux磁盘扩容lvm

目录 Linux磁盘管理基础知识介绍 1.确认分区类型 2.添加新硬盘 3.给新硬盘添加分区 (2)指定分区类型 4.创建物理卷 5.创建卷组 6.扩展逻辑卷 7.刷新文件系统 (1)查看文件系统 xfs文件系统使用(centos&#…

【YOLOv8系列】图像分类篇----通过YOLOv8实现图像分类功能

最近需要使用YOLOv8对自己的数据集进行训练,从而实现图像分类的功能,因此记录一下整个过程。 YOLOv8的github地址:https://github.com/ultralytics/ultralytics 参考链接:超详细YOLOv8图像分类全程概述:环境、训练、验证与预测详解 文章目录 一、YOLOv8环境搭建二、准备…

80. 删除有序数组中的重复项 II【 力扣(LeetCode) 】

一、题目描述 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成…

docker部署mysql8.x版本,shell脚本字段部署安装mysql

docker部署mysql8.x版本&#xff0c;shell脚本字段部署安装mysql **1.**先自行安装好docker环境&#xff0c;docker的镜像注册中心最好是国内的&#xff0c;例如执行一下命令直接修改docker配置&#xff0c; cat <<EOF > /etc/docker/daemon.json {"registry-m…

深入理解算数表达式求值:后缀表达式的转换与计算

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd;没人会嘲笑竭尽全力的人&#xff01; 前…

python实现定时任务功能的两种方案

第一种方式&#xff0c;使用python自带的threading库&#xff0c;使用递归调用实现定时任务 import threading import time def job():print("定时任务执行")# 设置定时任务的间隔时间&#xff0c;单位为秒interval 5# 使用递归调用实现定时任务的循环执行threadin…

PT2262-IR

PT2262是一款很古老的编码芯片&#xff0c;其兼容型号有&#xff1a;SC2262&#xff0c;AD2262&#xff0c;SC2260(需改变匹配电阻)等。 依据其datasheet&#xff0c;PT2262射频模式工作原理: CODE BITS A Code Bit is the basic component of the encoded waveform, and ca…

34_YOLOv5网络详解

1.1 简介 YOLOV5是YOLO&#xff08;You Only Look Once&#xff09;系列目标检测模型的一个重要版本&#xff0c;由 Ultralytics 公司的Glenn Jocher开发并维护。YOLO系列以其快速、准确的目标检测能力而闻名&#xff0c;尤其适合实时应用。YOLOV5在保持高效的同时&#xff0c…

13、.Net相关的书籍 - .Net循序渐进系列文章

这篇博文介绍.Net相关的书籍。 1、 ASP.NET。 ASP.NET作为微软.NET体系里的重要组成部分&#xff0c;得到了微软合作伙伴以及众多的微软编程爱好者的欢迎。ASP.NET在经历了好几个版本的更新之后&#xff0c;其内容也越来越充实了。目前ASP.NET的版本是4.0版&#xff0c;其中…

LeetCode/NowCoder-二叉树OJ练习

励志冰檗&#xff1a;形容在清苦的生活环境中激励自己的意志。&#x1f493;&#x1f493;&#x1f493; 目录 说在前面 题目一&#xff1a;单值二叉树 题目二&#xff1a;相同的树 题目三&#xff1a;对称二叉树 题目四&#xff1a;二叉树的前序遍历 题目五&#xff1a;另…

【ifconfig 命令用于查看的网络接口信息说明】

ifconfig 命令用于查看的网络接口信息说明 提示:本文是在Ubuntu系统上测试 网络接口信息 6:~$ ifconfig en2s0f0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 ether f8:e2:1e:63:19:61 txqueuelen 1000 (以太网) RX packets 100 bytes 1000 (0.0 B) RX errors 1 d…

C++ 访问修饰符 private、protected、public

C 访问修饰符 private&#xff0c;protected&#xff0c;和public flyfish 2009-01-19 2024-07-23 做成表格形式&#xff0c;可以直接拖到下面&#xff0c;看表格形式更清楚。 访问修饰符&#xff08;Access Modifiers&#xff09;是C中用于控制类和结构体成员&#xff08;包…

鸿蒙OpenHarmony Native API【drawing_path.h】 头文件

drawing_path.h Overview Related Modules: [Drawing] Description: 文件中定义了与自定义路径相关的功能函数 Since: 8 Version: 1.0 Summary Functions FunctionDescription[OH_Drawing_PathCreate] (void)[OH_Drawing_Path] * 函数用于创建一个路径对象OH_Drawin…

蜂窝物联云平台:一站式服务,智能生活从此开始!

蜂窝云平台 一、PC端展示与管理 GIS地图整合 在GIS地图上精确展示地块&#xff0c;轻松点选查看详细设备信息、实时监控和控制功能&#xff0c;以及基地的全方位介绍。 个性化定制界面 界面布局与功能展示均可按需求定制&#xff0c;打造独一无二的用户体验。 数据集中看板 将…

以进程完成并发的UDP服务端

网络(八)并发的UDP服务端 以进程完成功能 多进程处理 UDP客户端 // todo UDP发送端 #include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/types.h> #include <stdlib.h> #includ…

【Python机器学习】k-近邻算法简单实践——改进约会网站的配对效果

需求背景&#xff1a; XX一直使用约会网站寻找适合自己的约会对象&#xff0c;ta会把人分为3种类型&#xff1a; 不喜欢、魅力一般、非常有魅力 对人分类轴&#xff0c;发现了对象样本的以下3种特征&#xff1a; 1、每年获得的飞行里程数 2、玩视频游戏所耗时间百分比 3、…

linux操作系统之线程

1.线程概念 线程是一个轻量级进程,每一个线程都属于一个进程 进程是操作系统资源分配的最小单位,而线程是CPU任务调度的最小单位 线程是一个任务执行的过程,包括创建,调度,消亡 创建:线程空间位于进程空间,进程中的线程,栈区独立,并共享进程中的数据区,文本区,堆区 调度:宏观…

常见的JS混淆及处理办法

1&#xff0c;变量名混淆 文本增添属性的过程中有很多操作空间 原始代码&#xff1a; s[age,job] function xx(){};xx.prototype[s[0]]15 xx.prototype[s[1]]teacheranew xx() 将属性名经过base64加密&#xff0c;并对函数名xx,&#xff0c;数组名s&#xff0c;经过混淆处理…

【C++】C++如何使用结构体中的枚举类型

目录 示例1&#xff1a;在结构体中定义枚举 示例2&#xff1a;使用枚举作为结构体成员的类型 示例3&#xff1a;在结构体方法中使用枚举 注意事项 在C中&#xff0c;可以在结构体&#xff08; struct &#xff09;中定义枚举类型&#xff0c;并使用这些枚举值作为结构体成员…