java 中链表的定义与使用方法

Java实现链表主要依靠引用传递,引用可以理解为地址,链表的遍历多使用递归,这里我存在一个疑问同一个类的不同对象的的相同方法的方法内调用算不算递归.
这里我写的是单向链表;
实例代码:
package com.example.java;
public class MyLink {
public static void main(String [] args){
Link l=new Link();
mytype[] la;
mytype dsome=new mytype("韩敏","dsome",21);
mytype shao=new mytype("邵晓","john",45);
mytype hua=new mytype("华晓风","jam",46);
mytype duo=new mytype("余小风","duo",1000);
mytype wang=new mytype("王秋","jack",21);
mytype shi=new mytype("韩寒","bob",3000);
mytype yu=new mytype("于冬","keven",30);
l.add(dsome);//测试增加节点
l.add(shao);
l.add(hua);
l.add(wang);
l.add(shi);
l.add(duo);
l.add(yu);
System.out.println("链表长度:"+l.length());//链表长度
la=l.toArray();
for(int i=0;i<la.length;i++){
System.out.println(la[i].getInfo());
} System.out.println("是否包含多余:"+l.contains(duo)+"\n");
System.out.println("删除多余后\n");
l.remove(duo);
la=l.toArray();
for(int i=0;i<la.length;i++){//转化为数组之后输出
System.out.println(la[i].getInfo());
}
System.out.println("\n利用索引方法输出全部数据");
for(int i=0;i<l.length();i++){
System.out.println(l.get(i).getInfo());
}
System.out.println("是否包含多余:"+l.contains(duo)+"\n");
l.clean();
System.out.println("执行清空操作后链表长度: "+l.length()+"\t是否为空链表:"+l.isEmpty());
}
}
package com.example.java;
public class Link {
private class Node{//内部类
private Node next;
private mytype data;
public Node(mytype data){
this.data=data;
}
public void addNode(Node newNode){//增加节点
if(this.next==null){
this.next=newNode;
}else{
this.next.addNode(newNode);
}
}
public mytype getNode(int index){//按照角标返回数据
if(index==Link.this.foot++){
return this.data;
}else{
return this.next.getNode(index);
}
}
public boolean iscontain(mytype data){//判断是否含有该数据
if(this.data.equals(data)){
return true;
}else{
if(this.next!=null){
return this.next.iscontain(data);
}else{
return false;
}
}
}
public void removeNode(Node previous,mytype data){//删除节点
if(this.data.equals(data)){
previous.next=this.next;
}else{
this.next.removeNode(this,data);
}
}
public void toArrayNode(){//转化数组
Link.this.Larray[Link.this.foot ++]=this.data;
if(this.next!=null){
this.next.toArrayNode();
}
}
}
//内部类定义完毕
private Node root;
private int count=0;
private int foot;
private mytype [] Larray;
public void add(mytype data){//增加节点
if(data==null){
System.out.print("增加数据失败,数据为空");//测试用
return;
}
Node newNode=new Node(data);
if(this.root==null){
this.root=newNode;
this.count++;
}else{
this.root.addNode(newNode);
this.count++;
}
}
public int length(){//链表长度
return this.count;
}
public boolean isEmpty(){//是否为空链表
if(this.count==0)return true;
else return false;
}
public void clean(){//清空链表
this.root=null;
this.count=0;
}
public mytype get(int index){//索引返回节点所存的数据
if(index>=this.count||index<0){
System.out.print("越界错误");//测试用
return null;
}else{
this.foot=0;
return this.root.getNode(index);
}
}
public boolean contains(mytype data){//判断链表数据是否含data
if(data==null)
return false;
return this.root.iscontain(data);
}
public void remove(mytype data){//删除指定数据节点
if(this.contains(data)){
if(this.root.data.equals(data)){
this.root=this.root.next;
this.count--;
}
else{
this.count--;
this.root.next.removeNode(root,data);
}
}else{
System.out.print("删除错误");//测试用
}
}
public mytype[] toArray(){//把链表转化成对象数组
if(this.count==0){
return null;
}
this.foot=0;
this.Larray=new mytype [this.count];
this.root.toArrayNode();
return this.Larray;
}
}
package com.example.java;
public class mytype {
private String name;
private String people;
private int age;
public mytype(String name,String people,int age){//链表中的数据(可自定义)
this.name=name;
this.people=people;
this.age=age;
}
public boolean equals(mytype data){//判断数据是否相同
if(this==data){
return true;
}
if(data==null){
return false;
}
if(this.name.equals(data.name)&&this.people.equals(data.people)&&this.age==data.age){
return true;
}else{
return false;
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPeople() {
return people;
}
public void setPeople(String people) {
this.people = people;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getInfo(){
return "名字 :"+this.name+"\n"+
"人物 :"+this.people+"\n"+
"年龄 :"+this.age;
}
}
测试效果如下:
链表长度:7 名字 :韩敏 人物 :dsome 年龄 :21 名字 :邵晓 人物 :john 年龄 :45 名字 :华晓风 人物 :jam 年龄 :46 名字 :王秋 人物 :jack 年龄 :21 名字 :韩寒 人物 :bob 年龄 :3000 名字 :余小风 人物 :duo 年龄 :1000 名字 :于冬 人物 :keven 年龄 :30 是否包含多余:true 删除多余后 名字 :韩敏 人物 :dsome 年龄 :21 名字 :邵晓 人物 :john 年龄 :45 名字 :华晓风 人物 :jam 年龄 :46 名字 :王秋 人物 :jack 年龄 :21 名字 :韩寒 人物 :bob 年龄 :3000 名字 :于冬 人物 :keven 年龄 :30 利用索引方法输出全部数据 名字 :韩敏 人物 :dsome 年龄 :21 名字 :邵晓 人物 :john 年龄 :45 名字 :华晓风 人物 :jam 年龄 :46 名字 :王秋 人物 :jack 年龄 :21 名字 :韩寒 人物 :bob 年龄 :3000 名字 :于冬 人物 :keven 年龄 :30 是否包含多余:false 执行清空操作后链表长度: 0 是否为空链表:true
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# java
# 链表
# 链表详解
# 链表实例
# java单向链表的实现实例
# JAVA实现链表面试题
# Java单链表基本操作的实现
# Java数据结构和算法之链表详解
# 递归
# 为空
# 韩寒
# 清空
# 的是
# 遍历
# 希望能
# 自定义
# 谢谢大家
# 转化为
# 我写
# 算不算
# 转化成
# 判断是否
# 邵晓
# jam
# hua
# john
# 华晓风
相关文章:
建站之星价格显示格式升级,你的预算足够吗?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
建站之星导航菜单设置与功能模块配置全攻略
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
制作网站的基本流程,设计网站的软件是什么?
子杰智能建站系统|零代码开发与AI生成SEO优化指南
详解jQuery停止动画——stop()方法的使用
文字头像制作网站推荐软件,醒图能自动配文字吗?
如何通过PHP快速构建高效问答网站功能?
如何通过VPS建站无需域名直接访问?
图册素材网站设计制作软件,图册的导出方式有几种?
建站主机CVM配置优化、SEO策略与性能提升指南
建站之星CMS建站配置指南:模板选择与SEO优化技巧
简单实现Android验证码
Android滚轮选择时间控件使用详解
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
学校为何禁止电信移动建设网站?
c++怎么用jemalloc c++替换默认内存分配器【性能】
北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?
定制建站方案优化指南:企业官网开发与建站费用解析
如何在Tomcat中配置并部署网站项目?
深圳网站制作平台,深圳市做网站好的公司有哪些?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
济南网站制作的价格,历城一职专官方网站?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
如何在西部数码注册域名并快速搭建网站?
Bpmn 2.0的XML文件怎么画流程图
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
C#如何使用XPathNavigator高效查询XML
c# 在高并发下使用反射发射(Reflection.Emit)的性能
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
如何通过VPS建站实现广告与增值服务盈利?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
电脑免费海报制作网站推荐,招聘海报哪个网站多?
如何选择香港主机高效搭建外贸独立站?
,石家庄四十八中学官网?
如何在万网ECS上快速搭建专属网站?
建站之星后台密码遗忘如何找回?
建站168自助建站系统:快速模板定制与SEO优化指南
如何通过NAT技术实现内网高效建站?
如何快速查询网址的建站时间与历史轨迹?
如何访问已购建站主机并解决登录问题?
外贸公司网站制作,外贸网站建设一般有哪些步骤?
代刷网站制作软件,别人代刷火车票靠谱吗?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
建站10G流量真的够用吗?如何应对访问高峰?
如何在建站之星网店版论坛获取技术支持?
建站主机选购指南:核心配置与性价比推荐解析
建站之星代理费用多少?最新价格详情介绍
如何快速生成可下载的建站源码工具?
*请认真填写需求信息,我们会在24小时内与您取得联系。