算法学习笔记——单双链表及其反转—堆栈诠释

单双链表及其反转——堆栈诠释

按值传递

  • intlongbyteshortcharfloatdouble、booleanString 都是按值传递

  • 概念:在方法被调用时,实参通过形参把它的内容副本传入方法内部,此时形参接收到的内容是实参值的一个拷贝,因此在方法内对形参的任何操作,都仅仅是对这个副本的操作,不影响原始值的内容

  • 分析:向函数传参时,只是在栈中生成变量a的一个副本a1,在函数内被修改的a其实是a1,所以函数内修改参数的值并不会影响实参的值,这就是值传递

    int a = 10;
    f(a);
    system.out.println(a);public static void f(int a) {a = 0;
    }// 结果还是打印10
    

按引用传递

  • 其他类型和数值都是按引用传递

  • 概念:”引用”也就是指向真实内容的地址值,在方法调用时,实参的地址通过方法调用被传递给相应的形参,在方法体内,形参和实参指向通愉快内存地址,对形参的操作会影响的真实内容

  • 分析:

    • 创建Number对象存储在堆中,并将其引用地址赋值给变量b
    • 调用g1()g2()方法时,栈空间中会拷贝对象引用地址为b1和b2并作为参数传递,因此bb1b2都指向堆中同一个Number对象
    • g1()方法中,将参数b1修改为null,这只是改变了b1的指向,不影响主函数中变量b的指向,主函数的b仍然指向原来的Number对象。
    • g2()方法中,通过参数b2修改b2.val的值为6,这相当于通过b2的引用地址找到并修改了堆中Number对象的val值,因此主函数中变量b所指向的Number对象的val值也会被修改
    • 总结:指向的是同一个内存区域,但是不同的两个引用
    public static void main(String[] args){Number b = new Number(5);g1(b);System.out.println(b.val);g2(b);System.out.println(b.val);
    }
    // 结果:
    // 5
    // 6public static class Number{public int val;public Number(int v){val = v;}
    }public static void g1(Number b){b = null;
    }public static void g3(Number b){b.val = 6;
    }public static void g3(int[] c){c = null;
    }
    

单链表的定义

  • 什么是单链表,单链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null
  • 单链表不要求逻辑上相邻的两个元素在物理位置上也相邻,因此不需要连续的存储空间
  • 单链表的入口节点称为链表的头结点也就是head
public class ListNode {// 结点的值public int val;// 下一个节点public ListNode next;// 节点的构造函数(有两个参数)public ListNode(int val, ListNode next) {this.val = val;this.next = next;}
}

在这里插入图片描述

双链表的定义

  • 什么是双链表,双链表是一种通过指针串联在一起的线性结构,每一个节点由三部分组成,每个节点包含数据域、指向下一个节点的指针(next)和指向前一个节点的指针(prev)
  • 双链表 既可以向前查询也可以向后查询
  • 双链表的入口节点称为链表的头结点也就是head
public class DoubleListNode {// 结点的值public int val;// 下一个节点public DoubleListNode next;// 上一个节点public DoubleListNode prev;// 节点的构造函数(有两个参数)public ListNode(int val, DoubleListNode next) {this.val = val;this.prev = prev;this.next = next;}
}

在这里插入图片描述

反转单链表

public static ListNode reverseList(ListNode head){ListNode pre = null;ListNode next = null;while (head != null){next = head.next;head.next = pre;pre = head;head = next;}return pre;
}

在这里插入图片描述

反转双链表

public static ListNode reverseDoubleList(DoubleListNode head){DoubleListNode pre = null;DoubleListNode next = null;while (head != null){next = head.next;head.next = pre;head.last = next;pre = head;head = next;}return pre;
}

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

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

相关文章

Makefile中eval函数的用法

Makefile中eval函数的用法 一,eval函数的使用方法:二,eval函数的优势 一,eval函数的使用方法: 在Makefile中,eval 函数的作用是用来动态地执行Makefile中的命令或赋值操作。它的基本语法如下: …

Spring MVC数据绑定和响应——简单数据绑定(三)POJO绑定

一、POJO数据绑定的使用场景 在使用简单数据类型绑定时,可以很容易的根据具体需求来定义方法中的形参类型和个数,然而在实际应用中,客户端请求可能会传递多个不同类型的参数数据,如果还使用简单数据类型进行绑定,那么就…

adb shell执行定时2小时命令

在Android设备上使用adb shell来执行一个定时2小时后运行的命令并不直接支持,因为adb shell是即时执行shell命令的工具,不支持内置的定时任务功能。但是,你可以通过几种方法来实现类似的功能: 方法一:使用sleep命令 …

dbeaver数据库链接工具

1、下载dbeaver 一个绿色版一个安装版,官网开源版 2、安装 3、可以导入之前navicat的链接 导入 选择navicat 反编译密码的:https://tool.lu/coderunner navicat 版本15的密码解密:https://www.iatodo.com/navicatpw

css动画自定义动画间隔时间

function playAnimation(element) {var animationName rubberBand;var duration 2000; // 动画持续时间,单位为毫秒element.style.animation ${animationName} 1s ease;element.addEventListener(animationend, function() {// 动画结束后重置样式,以…

服务运营 | MS文章精选:线上点单,当真免排队?餐饮零售与医疗场景中的全渠道运营

编者按: 小A走进了一家奶茶店,准备向店员点单,但却在屏幕上看到还有98杯奶茶待制作(因为线上订单突然暴增)。因此,小A不满地嘟囔着离开了奶茶店。这个例子展示了线上渠道可能会对线下渠道造成一些负面影响…

使用AES,前端加密,后端解密,spring工具类了

学习python的时候,看到很多会对参数进行加密,于是好奇心驱使下,让我去了解了下AES加密如何在java中实现。 首先 npm install crypto-js 然后在你的方法中,给你们前端源码看看,因为我用的ruoyi框架做的实验&#xff…

四川音盛佳云电子商务有限公司抖音电商的先行者

在当今数字时代,电商行业风起云涌,各大平台竞相争夺市场份额。而在这其中,四川音盛佳云电子商务有限公司以其独特的抖音电商服务模式,悄然崛起,成为了行业中的一股不可忽视的力量。今天,就让我们一起走进音…

【GD32F303红枫派使用手册】第二十六节 EXMC-液晶驱动实验

26.1 实验内容 通过本实验主要学习以下内容: LCD显示原理 EXMC NOR/SRAM模式时序和8080并口时序 LCD显示控制 26.2 实验原理 使用MCU的EXMC外设实现8080并口时序,和TFT-LCD控制器进行通信,控制LCD显示图片、字符、色块等。 26.2.1 TFT…

图像超分辨率重建

一、什么是图像超分辨 图像超分辨是一种技术,旨在通过硬件或软件的方法提高原有图像的分辨率。这一过程涉及从一系列低分辨率的图像中获取一幅高分辨率的图像,实现了时间分辨率向空间分辨率的转换。超分辨率重建的核心思想是利用多帧图像序列的时间带宽来…

计算机毕业设计Thinkphp/Laravel学生考勤管理系统zyoqy

管理员登录学生考勤管理系统后,可以对首页、个人中心、公告信息管理、年级管理、专业管理、班级管理、学生管理、教师管理、课程信息管理、学生选课管理、课程签到管理、请假申请管理、销假申请管理等功能进行相应操作,如图5-2所示。学生登录进入学生考勤…

金蝶云苍穹考试题目大全

前言 受不了某些地方看个答案还要收费,总结多份试卷 题目有重复,关键字检索即可 试卷一 金蝶云苍穹考试题目大全 单选题 开发知识错题反馈1.0分 1.关于编码规则的适用范围说法错误的是 A.单据没有设置主业务组织的情况下,则校验用户当前登…

【Spine学习16】之 人物面部绑定

1、创建头部骨骼 一根头骨 以头骨为父结点创建一个面部控制器face-holder 2、创建头发和face面部控制结点的变换约束 左右头发的约束指向为face结点 3、设定后发的变换约束,约束指向为face结点,反方向移动 设置参数为-100 同理,耳朵也依…

C# 中的 App.manifest 文件:优化应用程序配置与权限管理

前言 在开发 C# 应用程序时,可能会忽略一个重要的文件——App.manifest。这个文件看似不起眼,却在应用程序的运行和用户体验上扮演着关键角色。了解和正确配置 App.manifest 文件,不仅可以确保应用程序在不同操作系统上的兼容性,…

解决uniapp,textarea拉起页面被顶起和键盘被输入框遮挡的问题。

1:Android、ios 同时解决; 2:我们在开发的时候会发现textarea或者input拉起键盘的时候整个页面被顶起了,header也被顶没了;官方给了:adjustPositionfalse属性,设置完之后页面就不会被顶起,但是…

谈谈SQL优化

SQL优化是数据库性能优化中的关键环节,旨在提高查询执行的效率和响应速度。下面是一些常见的SQL优化技巧和策略,涵盖索引、查询设计、表结构设计等方面: 1. 索引优化 创建索引:为常用查询的过滤条件(WHERE 子句&…

了解json

一.什么是json 1.什么是json是一种轻量级的数据交互,可以按照指定的json格式去组织和封装数据 2.json本质上是一个带有特定格式的字符串 二.json主要功能:json就是一种在各个编程语言中流通的数据格式,负责不同语言中的数据传递和交互&…

【Python时序预测系列】基于CNN+Bi-LSTM实现单变量时间序列预测(案例+源码)

这是我的第309篇原创文章。 一、引言 基于CNN(卷积神经网络)和Bi-LSTM(双向长短期记忆网络)的单变量时间序列预测是一种结合空间特征提取和时间依赖建模的方法。以下是一个基于Python和TensorFlow/Keras实现的示例,展…

C++ 高频面试题

C 初级面试题及其详细解答 1. 解释 C 中的基本数据类型。 解答: C 提供了几种基本数据类型,包括: int:整型,用于存储整数。float 和 double:浮点型,用于存储小数。char:字符型&am…

Android 强制使用移动网络访问接口

Android 强制使用移动网络访问接口_安卓连接wifi强制使用移动数据-CSDN博客 Android应用层实现恢复出厂设置功能_android7 intent 打开恢复出厂设置-CSDN博客