文章目录

  • 单链表简单操作
    • 先说明我的理解。文章后面,会有代码验证
    • (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。

  1. 首先你需要将p定义为书名的即格式《p》 node p = null;
  2. 接着在给那本书起别名。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的区别,附代码相关推荐

  1. linux 进程间通信 dbus-glib【实例】详解四(上) C库 dbus-glib 使用(附代码)(编写接口描述文件.xml,dbus-binding-tool工具生成绑定文件)(列集散集函数)

    linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...

  2. linux 进程间通信 dbus-glib【实例】详解二(上) 消息和消息总线(附代码)

    linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...

  3. html js不触发_图文详解鼠标事件CSS:hover和JS:mouseover的区别

    在工作中为了使页面更具有吸引力,前端开发人员经常会在页面中加上鼠标移入和移出的效果.鼠标移入移出的设置,一般有两种方法,一种是单纯用CSS中的hover伪类,另一种可以用JS 中的DOM事件,即onm ...

  4. c语言中优先级劣后级,详解基金中优先级和劣后级的区别

    原标题:详解基金中优先级和劣后级的区别 我们经常看到一些私募基金在投资收益模式上进行创新,将LP分为优先及劣后两个级别.很多朋友都很困惑为何要如此设计.今天,关天资本将为大家详细介绍基金中的优先级和劣 ...

  5. Python之ruamel.yaml模块详解(三)| ruamel.yaml与pyyaml的区别

    Python之ruamel.yaml模块详解(三)| ruamel.yaml与pyyaml的区别 12 默认支持Yaml1.2 13 Py2和Py3重新整合 14 修复 15 测试 16 API 接前 ...

  6. css三种定位都脱离文档流了吗,CSS布局之脱离文档流详解——浮动、绝对定位脱离文档流的区别...

    1.代码 (1)示例代码1 CSS布局之脱离文档流详解--浮动.绝对定位脱离文档流的区别 .left { width: 300px; height: 500px; background: red; f ...

  7. python打开文件的语法_python27语法Python文件打开方式实例详解【a、a+、r+、w+区别】...

    本文实例讲述了Python文件打开方式.分享给大家供大家参考,具体如下: 第一步 排除文件打开方式错误: r只读,r+读写,不创建 w新建只写,w+新建读写,二者都会将文件内容清零 (以w方式打开,不 ...

  8. 详解无线AP系统,以及与无线路由器的区别

    很多朋友在做网络覆盖的时候,经常会提到,是用无线ap还是用无线路由器,今天我们一起来了解下二者的区别. 无线路由器的应用 无线路由器其实就是无线AP+路由功能,现在很多的无线路由器都拥有AP功能.如果 ...

  9. WebView使用详解(一)——Native与JS相互调用(附JadX反编译)

    前言:念念不忘,必有回响,永远坚持你所坚持的! 相关文章: 1.<WebView使用详解(一)--Native与JS相互调用(附JadX反编译)> 2.<WebView使用详解(二) ...

  10. python协程详解_对Python协程之异步同步的区别详解

    一下代码通过协程.多线程.多进程的方式,运行代码展示异步与同步的区别. import gevent import threading import multiprocessing # 这里展示同步和异 ...

最新文章

  1. Ajax基础和Json基础
  2. windows卸载程序提示“请等待当前程序完成卸载或更改“问题解决方法,windows卸载卡进程问题解决方法
  3. 用Python制作一个随机抽奖小工具
  4. java cssselector类_CSS 元素选择器
  5. bootstrap 学习网址
  6. Linux 进程信号详细总结
  7. python 分布式锁_Python分布式锁 Sherlock
  8. SIR模型简单了解(Susceptible Infected Recovered Model)
  9. php hscan,hgetall 替代 hscan的用法详解。
  10. 最新全套码支付源码/QQ+微信+支付宝三网免挂支付系统源码
  11. 中国大数据产业地图,四川61家大数据企业上榜!
  12. html caption属性,HTML caption align 属性 | 菜鸟教程
  13. 服务器销售术语,服务器术语大全
  14. 计算机操作系统产生的先后顺序,任务调度优先级
  15. Google Authenticator(谷歌身份验证器)在苹果手机上IOS系统中 输入密钥时提示密钥无效的解决方案
  16. Magic Leap:混合现实代表着未来
  17. typecho小程序双鱼2.5版本更新说明
  18. 利用Olami SDK 实现语音控制计算器(iOS)
  19. Mac 安装homebrew
  20. linux 命令英文全称,linux 命令英文全称

热门文章

  1. 《临江仙》---摘抄
  2. 公司注册地址要注意,小心被拉“黑”,征信受影响
  3. OneStep 移植
  4. SpringCloudStream基础
  5. 【技能】Chrome扩展程序的使用
  6. 如果用户没上传头像,则为其设置默认用户头像
  7. vue项目中使用Js判断图片是否加载完 所有图片加载完成前展示Loading效果
  8. 游戏俄罗斯方块(c语言)
  9. 仿酷狗音乐列表点击item子控件展开功能
  10. 写给新的一年(2015)