李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
Scala单向链表练习
Leefs
2021-04-25 AM
1868℃
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
NLP
4
标签云
Hbase
排序
持有对象
Jenkins
BurpSuite
Spark
GET和POST
Spring
工具
Http
pytorch
MyBatis
Kafka
机器学习
Spark RDD
SQL练习题
字符串
JavaSE
数据结构和算法
并发线程
ajax
JavaWEB项目搭建
SpringCloud
VUE
高并发
MySQL
nginx
Docker
前端
哈希表
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭