链表头结点指向失败

news2024/11/15 5:53:11

链表头结点指向失败

情况一:Node ans = new Node(); Node headAns = ans;

 

当你使用 Node ans = new Node(); 时,你在内存中创建了一个新的 Node 对象实例,并且 ans 变量存储了这个新对象在内存中的地址。

 

然后 Node headAns = ans; 这行代码做的事情是,将 headAns 也赋值为 ans 所存储的内存地址。也就是说,此时 ansheadAns 都指向了同一个刚创建的 Node 对象,它们共享这个对象的内存地址。

 

当你后续通过 ans = ans.next; 来移动 ans 指针沿着链表前进时,比如假设 next 指向了链表中的下一个节点,那么 ans 就会更新为指向新的节点,但 headAns 并没有被改变,它仍然指向最初的那个节点,也就是整个链表的头节点。

 

这是因为 headAns 只是存储了一个内存地址,当你没有对它进行重新赋值操作时,它就会一直保持指向最初的那个对象,也就是链表的头节点。

情况二:Node ans = null; Node headAns = ans;

 

在这里,Node ans = null; 表示 ans 初始化为一个空指针,它不指向任何有效的内存地址,也就是没有指向任何实际的 Node 对象。

 

然后 Node headAns = ans; 使得 headAns 也被初始化为同样的空指针状态。

 

当你后续尝试通过 ans = ans.next; 来移动 ans 指针时,因为 ans 最初就是空指针,所以 ans.next 这种操作是非法的(会导致程序崩溃,通常会抛出空指针异常之类的错误,具体取决于编程语言),在假设没有发生这种错误并且我们继续分析的情况下,即使 ans 被赋予了某个新的节点地址(假设通过其他正确的方式给 ans 赋值了一个有效的节点地址),headAns 仍然保持为空指针,因为它没有被重新赋值过,它始终指向最初的那个空状态,也就是它不会自动跟着 ans 的赋值变化而变化,始终保持为 null

 

所以总结来说,在这两种情况下,关键的区别在于最初 ans 是否指向了一个实际的对象(通过 new Node() 创建的情况)还是初始化为空指针(null)的情况。当 ans 初始化为空指针时,后续的操作如果没有正确地更新 headAns,它就会一直保持为空指针状态,而不会指向实际构建的链表的头节点。

Node ans = new Node(); Node headAns = ans;

这样写,ans链表添加节点next,ans = ans.next,headAns可以指向一整个链表的头结点。

Node ans = null; Node headAns = ans;

这样写,ans链表添加节点next,ans = ans.next,headAns不可以指向一整个链表的头结点,始终为null

 

变量=null会赋值内存地址吗

不会

当你将一个变量赋值为 null(在支持 null 概念的编程语言中,比如 Java、C# 等),它并不会被赋予一个有效的内存地址来指向实际的数据对象。

 

相反,null 表示该变量不指向任何有效的内存位置,也就是它没有引用任何实际存在的对象或数据结构。

 

例如在 Java 中:

 

 class MyClass {
     // 类的定义内容
 }
 ​
 MyClass obj = null;

 

这里的 obj 变量被初始化为 null,此时它在内存中并没有一个有效的内存地址与之对应,它仅仅是一个空的引用,表示目前没有指向任何 MyClass 的实例对象。

 

在 C++ 中,虽然没有直接等同于 null 的概念,但有类似的空指针表示方式,比如 nullptr

 

 class MyClass {
     // 类的定义内容
 };
 ​
 MyClass* obj = nullptr;

 

这里的 obj 指针被初始化为 nullptr,同样意味着它不指向任何有效的 MyClass 对象,也就是没有一个有效的内存地址与之关联,它只是一个空指针的状态,表示当前未指向任何实际的内存区域来获取 MyClass 对象相关的数据。

 

所以,将变量赋值为 null(或类似的空指针表示形式)是表示该变量当前不具有有效的内存地址指向,而不是被赋予了一个特定的内存地址。

 

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

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

相关文章

接口自动化代码编写规范

命名规范 文件命名:测试文件应该以 test_ 开头,以 _test.py 结尾,例如:test_my_module_test.py。 函数命名:测试函数应该以 test_ 开头,描述清楚被测试的功能或行为,使用下划线分隔单词&#…

ESLint 使用教程(四):ESLint 有哪些执行时机?

前言 ESLint 作为一个静态代码分析工具,可以帮助我们发现和修复代码中的问题,保持代码风格的一致性。然而,ESLint的最佳实践不仅仅在于了解其功能,更在于掌握其执行时机。本文将详细介绍ESLint在不同开发阶段的执行时机&#xff…

Leetcode 存在重复元素II

这段代码的算法思想可以用以下步骤来解释: 算法思想 使用哈希表(HashMap)存储每个元素的索引: 遍历数组 nums 时,使用一个 HashMap 来记录每个元素的值和它的索引位置。这样可以快速查找之前出现过的相同元素的索引。…

1111111111待修改--大流量分析(三)-BUUCTF

总结摘要 题目来来源URL https://buuoj.cn/challenges#%E5%A4%A7%E6%B5%81%E9%87%8F%E5%88%86%E6%9E%90%EF%BC%88%E4%B8%89%EF%BC%89 答题过程 这道题是看大佬写着说查找phpinfo,我现在也不知道为什么能够一下子就定位到这里了 这里先按照phpinfo进行&#xff…

在Docker环境下为Nginx配置HTTPS

前言 配置HTTPS已经成为网站部署的必要步骤。本教程将详细介绍如何在Docker环境下为Nginx配置HTTPS,使用自签名证书来实现加密通信。虽然在生产环境中建议使用权威CA机构颁发的证书,但在开发测试或内网环境中,自签名证书是一个很好的选择。 …

Python →爬虫实践

爬取研究中心的书目 现在&#xff0c;想要把如下网站中的书目信息爬取出来。 案例一 耶鲁 Publications | Yale Law School 分析网页&#xff0c;如下图所示&#xff0c;需要爬取的页面&#xff0c;标签信息是“<p>”&#xff0c;所以用 itemssoup.find_all("p&…

expo5.2运行web报错Cannot find module ‘react‘

修改app.json中的web output 配置为 ‘single’ 可以解决 expo run web 这个错误问题 "web": {"bundler": "metro","output": "single","favicon": "./assets/images/favicon.png"},相关链接&#xff1…

信号保存和信号处理

目录 信号保存中重要的概念 内核中信号的保存 对sigset_t操作的函数 对block&#xff0c;pendding&#xff0c;handler三张表的操作 sigpromask ​编辑 sigpending 是否有sighandler函数呢&#xff1f; 案例 信号处理 操作系统是如何运行的&#xff1f; 硬件中断 …

C#从入门到放弃

C#和.NET的区别 C# C#是一个编程语言 .NET .NET是一个在window下创建程序的框架 .NET框架不仅局限于C#,它还可以支持很多语言 .NET包括了2个组件&#xff0c;一个叫CLR(通用语言运行时)&#xff0c;另一个是用来构建程序的类库 CLR 用C写一个程序&#xff0c;在一台8688的机器…

STM32 HAL 矩阵按键(轮询方式)

1、简介 最近准备做个门禁系统,首先通过4x4矩阵按键实现密码的设定,查看网上资料完成了4x4矩阵按键的初步使用,整理一个傻瓜式操作方便后续的使用与复习。 2、实物图 3、STM32CubeMX配置 4、KEY.C /******************************************************************…

linux网络编程9——无锁队列

文章目录 无锁队列1. 无锁队列原理1.1 多线程并发控制策略介绍1.2 无锁队列概念1.3 无锁队列的分类1.3.1 以生产者消费者数量划分1.3.2 以底层数据结构划分1.3.3 侵入式与非侵入式链表队列 1.4 无锁队列应用场景 2. 无锁队列的实现2.1 MPSCQueue2.2 rte_ring 学习参考 无锁队列…

【电子设计】按键LED控制与FreeRTOS

1. 安装Keilv5 打开野火资料,寻找软件包 解压后得到的信息 百度网盘 请输入提取码 提取码:gfpp 安装526或者533版本都可以 下载需要的 F1、F4、F7、H7 名字的 DFP pack 芯片包 安装完 keil 后直接双击安装 注册操作,解压注册文件夹后根据里面的图示步骤操作 打开说明 STM…

(四)P2Link内置HTTP服务,分享本地文件

P2Link可快速为本地文件目录提供公网HTTP服务地址&#xff0c;用于远程浏览和下载本地文件&#xff0c;类似于nginx等服务器软件的静态资源功能。 相较于前两篇&#xff0c;Windows连接P2Link的WebDAV服务和Windows连接P2Link的FTP服务中描述的方案&#xff0c;通过HTTP分享文件…

Charles抓https包-配置系统证书(雷电)

1、导出证书 2、下载 主页上传资源中有安装包&#xff0c;免费的 openssl 安装教程自己搜 openssl x509 -subject_hash_old -in charles.pem 3、修改证书名、后缀改成点0 雷电打开root和磁盘写入 4、导入雷电证书根目录 证书拖进去&#xff0c;基本就完成了&#xff…

认证鉴权框架SpringSecurity-1--概念和原理篇

1、基本概念 Spring Security 是一个强大且高度可定制的框架&#xff0c;用于构建安全的 Java 应用程序。它是 Spring 生态系统的一部分&#xff0c;提供了全面的安全解决方案&#xff0c;包括认证、授权、CSRF防护、会话管理等功能。 2、认证、授权和鉴权 &#xff08;1&am…

动态规划一>子数组系列

题目&#xff1a; 2.解析&#xff1a; 代码&#xff1a; public int maxSubArray(int[] nums) {int n nums.length;int[] dp new int[n 1];int ret Integer.MIN_VALUE;for(int i 1; i < n; i){dp[i] Math.max(nums[i - 1], dp[i - 1] nums[i - 1]);ret Math.max(…

ctfshow DSBCTF web部分wp

ctfshow 单身杯 web部分wp web 签到好玩的PHP 源码&#xff1a; <?php error_reporting(0); highlight_file(__FILE__);class ctfshow {private $d ;private $s ;private $b ;private $ctf ;public function __destruct() {$this->d (string)$this->d;$this…

【How AI Works】读书笔记2 出发吧! AI纵览 第一部分

目录 1.说明 2.第一部分(P5~P8) 如何控制几乎所有计算机的方式 三个计算机的先驱人物 AI,机器学习和深度学习之间的关系 机器学习的介绍 深度学习的介绍 AI的介绍 模型 3.单词 4.专业术语 1.说明 书全名:How AI Works From Sorcery to Science 作者 Ronald T.Kneus…

MQ集群

目录 MQ集群 集群分类 普通集群 集群结构和特征 集群的部署 获取cookie 准备集群配置 启动集群 镜像模式 镜像模式的特征 镜像模式的配置 exactly模式 仲裁队列 集群特征仲裁队列&#xff1a;仲裁队列是3.8版本以后才有的新功能&#xff0c;用来替代镜像队列&#…

【excel】easy excel如何导出动态列

动态也有多重含义&#xff1a;本文将描述两种动态场景下的解决方案 场景一&#xff1a;例如表头第一列固定为动物&#xff0c;且必定有第二列&#xff0c;第二列的表头可能为猫 也可能为狗&#xff1b;这是列数固定&#xff0c;列名不固定的场景&#xff1b; 场景二&#xff1…