李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
Scala单向链表练习
Leefs
2021-04-25 AM
1271℃
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://lilinchao.com/archives/1237.html
上一篇
Scala队列练习
下一篇
Scala栈练习
取消回复
评论啦~
提交评论
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
标签云
Jenkins
国产数据库改造
Spark RDD
JVM
gorm
Redis
JavaWEB项目搭建
FileBeat
序列化和反序列化
Azkaban
Git
Livy
Tomcat
JavaWeb
Typora
MyBatis
稀疏数组
Java
DataWarehouse
Beego
VUE
Yarn
SQL练习题
数据结构
MySQL
Linux
Spark Streaming
Spark Core
BurpSuite
Spark SQL
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞