当前位置: 首页 > news >正文

2025.8.27链表_链表逆置

链表中的指针只是用来标记,具体连接方式,是按照node.next链接。

JAVA中头节点存东西,不是空的。

核心原理:Java 的参数传递是"值传递",但对象引用是"值传递引用"

也就是传过来了ListNode head。head=head.next不会改变,因为head存在栈内存里面。但是如果改变head.val值或者改变head.next值就会改变它原本的东西了。因为.val和.next存在堆内存里。

2. 内存模型可视化

调用前:

text

栈内存 (Stack)         堆内存 (Heap)
┌─────────────┐        ┌─────────────┐
│  main方法栈帧  │        │             │
│ head: 0x100 │──────→│ ListNode(1) │
│             │        │ val = 1     │
│             │        │ next = null │
└─────────────┘        └─────────────┘
调用 method(head) 时:

text

栈内存 (Stack)         堆内存 (Heap)
┌─────────────┐        ┌─────────────┐
│  main方法栈帧  │        │             │
│ head: 0x100 │──────→│ ListNode(1) │
│             │        │ val = 1     │
├─────────────┤        │ next = null │
│ method栈帧   │        └─────────────┘
│ head: 0x100 │───────┘
│             │
└─────────────┘
执行 head = head.next 后:

text

栈内存 (Stack)         堆内存 (Heap)
┌─────────────┐        ┌─────────────┐
│  main方法栈帧  │        │             │
│ head: 0x100 │──────→│ ListNode(1) │
│             │        │ val = 1     │
├─────────────┤        │ next = null │
│ method栈帧   │        └─────────────┘
│ head: null  │  // 只改变了局部变量!
│             │
└─────────────┘

3. 关键区别:修改引用 vs 修改对象

java

void method(ListNode head) {// 情况1:修改引用(不影响外部)head = head.next;  // 只改变栈内存中局部变量的值// 情况2:修改对象(影响外部)head.val = 100;    // 改变堆内存中对象的内容head.next = null;  // 改变堆内存中对象的指针
}
List<Integer> vals = new ArrayList<Integer>();
这个List是个接口,后面的ArrayList是具体的实现类
ArrayList<Integer> list = new ArrayList<Integer>();
list.add("apple");//add普通用法
list.add("orange");
list.add(1,"mango")//add带索引用法
ArrayList<Integer> fruits = new ArrayList<Integer>();
fruits.add("watermellon");
fruits.add("peach");
list.addAll(fruits);//addAll用法
String f = list.get(0);//get用法
list.remove(1);//删除索引为1的元素//ArrayList没有length属性,但是可以通过list.size()获取
int size = list.size();

http://www.dtcms.com/a/353127.html

相关文章:

  • 【Python-1】字符串连接方式“+“和“,”的区别
  • AI + 旅游 = 应用案例分析(一)
  • TDengine IDMP 5 个实测场景让监控变简单
  • 【和春笋一起学C++】(三十七)类的析构函数
  • rust语言(1.88.0)sqlite数据库rusqlite库(0.37.0)学习笔记
  • Linux 服务器故障全解析:常见问题及处理方法大全
  • 极简风格PDF格式转换解决方案
  • java将doc文件转pdf
  • PDF补丁丁:开源多年,完全免费的多功能 PDF 工具箱
  • Magicodes.IE.Pdf 生成导出PDF文件 bytes Stream FileStreamResult 下载
  • 像WPS Office 一样处理pdf页面尺寸
  • OpenGL 视差贴图
  • UVa11607 Cutting Cakes
  • Java垃圾回收器:从SerialGC到G1的演进/速通
  • 流程控制语句(1)
  • 如何检查 Linux 系统的内存使用情况
  • vue2实现背景颜色渐变
  • 【目标检测】论文阅读4
  • 分布式2PC理论
  • 大脑的藏宝图——神经科学如何为自然语言处理(NLP)的深度语义理解绘制新航线
  • (11)用于无GPS导航的制图师SLAM(一)
  • 【Android】原安卓生态发起网络GET请求 Post请求
  • 【87页PPT】智慧方案智慧校园智能化综合建设方案(附下载方式)
  • Linux操作系统—进程
  • 基于Prometheus Pushgateway与Alertmanager的自定义指标监控与告警实践指南
  • 【HTML】隐藏滚动条但保留功能
  • 年度优质会议推荐:【西安石油大学主办|IEEE出版|往届均EI】第七届智能控制、测量与信号处理国际学术会议 (ICMSP 2025)
  • Playwright进阶指南 (6) | 自动化测试实战
  • 从 GRIT 到 WebUI:Chromium 内置资源加载与前端展示的完整链路解析
  • 寻找AI——初识墨刀AI