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

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.xdnf.cn/news/18857.html

相关文章:

  • 科技赋能生态,智慧守护农林,汇岭生态开启农林产业现代化新篇章
  • TensorFlow 面试题及详细答案 120道(21-30)-- 模型构建与神经网络
  • 斯塔克工业技术日志:用基础模型打造 “战甲级” 结构化 AI 功能
  • uniapp H5禁止微信浏览器长按出菜单,只针对图片
  • 全球首款Al勒索软件PromptLock:跨平台攻击新威胁, Windows/macOs/Linux均受影响
  • 【生产事故处理--kafka日志策略保留】
  • 深入解析达梦数据库:模式分类、状态管理与实操指南
  • 【数据分享】安徽省安庆市地理基础数据(道路、水系、铁路、行政边界(含乡镇)、DEM等)
  • 如何用Renix实现网络测试自动化: 从配置分离到多厂商设备支持
  • WebConfig的登录与放行
  • 对比视频处理单元(VPU)、图形处理器(GPU)与中央处理器(CPU)
  • 前端-从零开始在本机部署一个前端项目
  • 流程控制语句(1)
  • Dify 从入门到精通(第 59/100 篇):Dify 的自动化测试(进阶篇)
  • 野火STM32Modbus主机读取寄存器/线圈失败(一)-解决接收中断不触发的问题
  • 嵌入式-定时器的时基单元,自制延迟函数-Day21
  • AI驱动的前端性能优化:从监控到自动化修复
  • C# 字符和字符串
  • 《信息检索与论文写作》实验报告三 中文期刊文献检索
  • 【算法速成课1 | 题解】洛谷P3366 【模板】最小生成树 MST(Prim Kruskal)
  • GitHub 宕机自救指南:保障开发工作连续性
  • Android中点击链接跳转到对应App页面的底层原理
  • 信号线串扰仿真
  • 【C++】类和对象 --- 类中的6个默认成员函数
  • 达梦数据库-控制文件 (二)
  • 如何在开发工具中使用钉钉MCP
  • 数据结构:在堆中插入元素(Inserting In a Heap)
  • 深度学习-----详解MNIST手写数字数据集的神经网络实现过程
  • Magicodes.IE.Pdf 生成导出PDF文件 bytes Stream FileStreamResult 下载
  • MYSQL---存储过程