详解p=q->next和p->next=q的区别,附代码
文章目录
- 单链表简单操作
- 先说明我的理解。文章后面,会有代码验证
- (1)p=q
- (2)p.next = q
- (3)p=q.next
- Node类
- 输出类Print
- 测试类
- 运行结果
- 延伸
- 1.理解node2.next = node; node.next = node3是在弄得node2和node3之间插入node节点
- 2.理解node.next = node3;node2.next = node; 是在弄得node2和node3之间插入node节点
- 3.p.next=q.next是删除q节点
- 验证
单链表简单操作
先说明我的理解。文章后面,会有代码验证
(1)p=q
这里相当于给一个名叫q的内存空间起了一个别名叫做p。p和q的hashcode相同,所以p和q实际上是同一个对象。
举个例子:你有一本书叫做《q》,你不方便使用它的原名。你就想给它起个别名p。
- 首先你需要将p定义为书名的即格式《p》 node p = null;
- 接着在给那本书起别名。p = q
(2)p.next = q
将q赋值给p.next。也就是说p的next中保存的会是q。那么p的下一个节点为q同时p与t的连接断开了
(3)p=q.next
理解为q.next(t)赋值给p,也就是将t赋值给p。这里相当于给一个名叫t的内存空间起了一个别名叫做p。p和t的hashcode相同,所以p和t实际上是同一个对象,只不过这个对象有两个名字。
###下面我将给出代码说明,为便于理解和证明为Node添加name属性
Node类
public class Node {public String name;public int value;public Node next;public Node(){}public Node(int data){this.value = data;}public Node(String name){this.name = name;}public Node(String name,int data){this.name = name;this.value = data;}}
输出类Print
public class Print {public static void printLinkedList(Node node) {System.out.print("Linked List: ");while (node != null) {System.out.print(node.name + ":"+ node.value + "->");node = node.next;}System.out.println();}}
测试类
public class Test {public static void main(String[] args) {Print print = new Print();Node node1 = new Node("node1",1);Node node2 = new Node("node2",2);Node node3 = new Node("node3",3);Node node4 = new Node("node4",4);node1.next = node2;node2.next = node3;node3.next = node4;node4.next = null;//(1)未作修改//print.printLinkedList(node1);//(2)测试 p = q node = node2//Node node = new Node("node");//node = node2;//System.out.println(node.hashCode());//System.out.println(node2.hashCode());//System.out.println(node == node2);//print.printLinkedList(node1);//print.printLinkedList(node);//(3)测试p.next = q node2.next = node//Node node = new Node("node",22);//node2.next = node;//System.out.println(node.hashCode());//System.out.println(node2.next.hashCode());//System.out.println(node3.hashCode());//print.printLinkedList(node1);//(4)测试p=q.next node = node2.nextNode node = new Node("node",22);node = node2.next;System.out.println(node.hashCode());System.out.println(node2.next.hashCode());System.out.println(node == node3);print.printLinkedList(node1);print.printLinkedList(node);}
}
运行结果
(1)
Linked List: node1:1->node2:2->node3:3->node4:4->
(2)node = node2;测试结果
460141958
460141958
true
Linked List: node1:1->node2:2->node3:3->node4:4->
Linked List: node2:2->node3:3->node4:4->
第二个是以node2开头,证实了是将node2赋值给node所以
name,value,next都相同
(3)node2.next = node;测试结果
charter2.Node@1b6d3586
charter2.Node@1b6d3586
charter2.Node@4554617c
Linked List: node1:1->node2:2->node:22->
这里node2之后是node2和node3的连接被断开了
(4)node = node2.next;测试结果
460141958
460141958
true
Linked List: node1:1->node2:2->node3:3->node4:4->
Linked List: node3:3->node4:4->
这里证实了将node2的下一个节点赋值给node所以node和node3的
name,value,next都相同。
延伸
1.理解node2.next = node; node.next = node3是在弄得node2和node3之间插入node节点
2.理解node.next = node3;node2.next = node; 是在弄得node2和node3之间插入node节点
3.p.next=q.next是删除q节点
验证
//插入节点1
//Node node = new Node(22);
//node2.next = node;
//node.next = node3;
//print.printLinkedList(node1);//插入节点2
//Node node = new Node(22);
//node.next = node3;
//node2.next = node;
//print.printLinkedList(node1);//删除节点
//node2.next = node3.next;
//print.printLinkedList(node1);
详解p=q->next和p->next=q的区别,附代码相关推荐
- linux 进程间通信 dbus-glib【实例】详解四(上) C库 dbus-glib 使用(附代码)(编写接口描述文件.xml,dbus-binding-tool工具生成绑定文件)(列集散集函数)
linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...
- linux 进程间通信 dbus-glib【实例】详解二(上) 消息和消息总线(附代码)
linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...
- html js不触发_图文详解鼠标事件CSS:hover和JS:mouseover的区别
在工作中为了使页面更具有吸引力,前端开发人员经常会在页面中加上鼠标移入和移出的效果.鼠标移入移出的设置,一般有两种方法,一种是单纯用CSS中的hover伪类,另一种可以用JS 中的DOM事件,即onm ...
- c语言中优先级劣后级,详解基金中优先级和劣后级的区别
原标题:详解基金中优先级和劣后级的区别 我们经常看到一些私募基金在投资收益模式上进行创新,将LP分为优先及劣后两个级别.很多朋友都很困惑为何要如此设计.今天,关天资本将为大家详细介绍基金中的优先级和劣 ...
- Python之ruamel.yaml模块详解(三)| ruamel.yaml与pyyaml的区别
Python之ruamel.yaml模块详解(三)| ruamel.yaml与pyyaml的区别 12 默认支持Yaml1.2 13 Py2和Py3重新整合 14 修复 15 测试 16 API 接前 ...
- css三种定位都脱离文档流了吗,CSS布局之脱离文档流详解——浮动、绝对定位脱离文档流的区别...
1.代码 (1)示例代码1 CSS布局之脱离文档流详解--浮动.绝对定位脱离文档流的区别 .left { width: 300px; height: 500px; background: red; f ...
- python打开文件的语法_python27语法Python文件打开方式实例详解【a、a+、r+、w+区别】...
本文实例讲述了Python文件打开方式.分享给大家供大家参考,具体如下: 第一步 排除文件打开方式错误: r只读,r+读写,不创建 w新建只写,w+新建读写,二者都会将文件内容清零 (以w方式打开,不 ...
- 详解无线AP系统,以及与无线路由器的区别
很多朋友在做网络覆盖的时候,经常会提到,是用无线ap还是用无线路由器,今天我们一起来了解下二者的区别. 无线路由器的应用 无线路由器其实就是无线AP+路由功能,现在很多的无线路由器都拥有AP功能.如果 ...
- WebView使用详解(一)——Native与JS相互调用(附JadX反编译)
前言:念念不忘,必有回响,永远坚持你所坚持的! 相关文章: 1.<WebView使用详解(一)--Native与JS相互调用(附JadX反编译)> 2.<WebView使用详解(二) ...
- python协程详解_对Python协程之异步同步的区别详解
一下代码通过协程.多线程.多进程的方式,运行代码展示异步与同步的区别. import gevent import threading import multiprocessing # 这里展示同步和异 ...
最新文章
- Ajax基础和Json基础
- windows卸载程序提示“请等待当前程序完成卸载或更改“问题解决方法,windows卸载卡进程问题解决方法
- 用Python制作一个随机抽奖小工具
- java cssselector类_CSS 元素选择器
- bootstrap 学习网址
- Linux 进程信号详细总结
- python 分布式锁_Python分布式锁 Sherlock
- SIR模型简单了解(Susceptible Infected Recovered Model)
- php hscan,hgetall 替代 hscan的用法详解。
- 最新全套码支付源码/QQ+微信+支付宝三网免挂支付系统源码
- 中国大数据产业地图,四川61家大数据企业上榜!
- html caption属性,HTML caption align 属性 | 菜鸟教程
- 服务器销售术语,服务器术语大全
- 计算机操作系统产生的先后顺序,任务调度优先级
- Google Authenticator(谷歌身份验证器)在苹果手机上IOS系统中 输入密钥时提示密钥无效的解决方案
- Magic Leap:混合现实代表着未来
- typecho小程序双鱼2.5版本更新说明
- 利用Olami SDK 实现语音控制计算器(iOS)
- Mac 安装homebrew
- linux 命令英文全称,linux 命令英文全称