李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
Scala单向链表练习
Leefs
2021-04-25 AM
1260℃
0条
# Scala单向链表练习 ### 一、概念 单向链表的定义可参考文章:[数据结构学习--链表](https://lilinchao.com/archives/479.html) ### 二、代码 > 单向链表 **object** ```scala object SingleLinkedListDemo01 { def main(args: Array[String]): Unit = { // 测试单向链表的添加和遍历 val heroNode1 = new HeroNode(1, "宋江", "及时雨") val heroNode3 = new HeroNode(3, "吴用", "智多星") val heroNode4 = new HeroNode(4, "公孙胜", "入云龙") val heroNode2 = new HeroNode(2, "卢俊义", "玉麒麟") // 创建一个单向链表 val singleLinkedList = new SingleLinkedList // 添加英雄 singleLinkedList.add(heroNode1) singleLinkedList.add(heroNode2) singleLinkedList.add(heroNode3) singleLinkedList.add(heroNode4) // 遍历英雄 println("------------------遍历英雄------------------------") singleLinkedList.list() //删除某个英雄 println("------------------删除某个英雄---------------------") singleLinkedList.delByNode(3) singleLinkedList.list() //更新信息 println("------------------更新信息------------------------") val heroNodeUpdata = new HeroNode(1, "宋公明", "呼保义") singleLinkedList.updataByNode(heroNodeUpdata) singleLinkedList.list() } } ``` **class** ```scala import scala.util.control.Breaks._ class SingleLinkedList { //先初始化一个头结点(用来定位链表的位置) val head = new HeroNode(0,"","") //添加链表数据,直接添加到链表尾部 def add(heroNode:HeroNode):Unit = { //使用临时节点指向头节点 var temp = head //循环,找到链表最后一个节点 breakable{ while (true){ //当下一个节点为空,代表找到最后一个节点 if(temp.next == null){ break() } //继续向后寻找下一个节点 temp = temp.next } } //在最后一个节点后添加元素 temp.next = heroNode } //遍历单向链表 def list():Unit = { //1.先判断链表是否为空 if(head.next == null){ println("链表为空!") return } //2.使用临时节点指向头结点(找到头部) var temp = head.next breakable( while(true){ //找到了链表的尾部 if(temp == null){ break() } printf("节点信息:no=%d name=%s nickname=%s\n",temp.no,temp.name,temp.nickname) temp = temp.next } ) } //删除单向链表数据 def delByNode(hNo:Int): Unit ={ //临时节点指向头结点 var temp = head var flag = false //标志是否找到待删除节点的 //循环找到对应hNo节点的坐标 breakable( while (true){ //说明该节点不存在 if(temp.next == null){ println("该节点不存在!") return } if(temp.next.no == hNo){ //找到的待删除节点的前一个节点temp flag = true break() } //继续向后查找 temp = temp.next } ) //找到该节点前一个节点位置 if(flag){ //将该节点下一个节点赋值给该节点 temp.next = temp.next.next } } //更新单向节点信息,根据Node编号来更改,及Node编号不能改 def updataByNode(heroNode: HeroNode): Unit ={ //1.临时节点指向头节点 var temp = head; var flag = false breakable( while (true){ //找到该节点 if(temp.no == heroNode.no){ flag = true break() } //该节点不存在 if(temp.next == null){ println("该节点不存在!") return } temp = temp.next } ) if(flag){ temp.name = heroNode.name temp.nickname = heroNode.nickname } } //在指定位置插入 } //先创建一个 HeroNode class HeroNode(hNo:Int,hName:String,hNickName:String){ var no:Int = hNo var name:String = hName var nickname:String = hNickName var next:HeroNode = null //next默认为null } ``` **运行结果** ``` ------------------遍历英雄------------------------ 节点信息:no=1 name=宋江 nickname=及时雨 节点信息:no=2 name=卢俊义 nickname=玉麒麟 节点信息:no=3 name=吴用 nickname=智多星 节点信息:no=4 name=公孙胜 nickname=入云龙 ------------------删除某个英雄--------------------- 节点信息:no=1 name=宋江 nickname=及时雨 节点信息:no=2 name=卢俊义 nickname=玉麒麟 节点信息:no=4 name=公孙胜 nickname=入云龙 ------------------更新信息------------------------ 节点信息:no=1 name=宋公明 nickname=呼保义 节点信息:no=2 name=卢俊义 nickname=玉麒麟 节点信息:no=4 name=公孙胜 nickname=入云龙 ```
标签:
数据结构
,
Scala
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://www.lilinchao.com/archives/1237.html
上一篇
Scala队列练习
下一篇
Scala栈练习
取消回复
评论啦~
提交评论
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
标签云
随笔
DataWarehouse
正则表达式
前端
Spark
国产数据库改造
Git
锁
栈
nginx
RSA加解密
字符串
MyBatisX
Yarn
Redis
Filter
Shiro
Hbase
Stream流
VUE
Golang基础
设计模式
Quartz
高并发
人工智能
MySQL
数学
哈希表
Jquery
Jenkins
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞