链表-java数据结构
Posted 旧时星空
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表-java数据结构相关的知识,希望对你有一定的参考价值。
链表(增,删,改,查)-java数据结构
####增:
单向链表且不考虑排序
创建的单向链表设有一个头节点,添加数据只需将class的next指向新增的对象。
暂时没有考虑到排序,难点在添加时需要遍历找到链表最末尾再添加即可。
链表里的单元是HeroNode对象,此处先创建一个HeroNode类
class HeroNode{
public int no;
public String name;
public String nickName;//绰号
public HeroNode next;
public HeroNode(int no,String name,String nickName) {//构造器
this.no=no;
this.name=name;
this.nickName=nickName;
}
@Override
public String toString() {
return "HeroNode [no=" + no + ", name=" + name + ", nickName=" + nickName + "]";
}
}
创建一个单链表类内部已创建一个HeroNode的头节点
class SingleLinkedList{
//初始化一个头节点用来创建定义整个单链表
private HeroNode head=new HeroNode(0,"","");
}
在SingleLinkedList内再考虑添加和遍历输出
public void addData(HeroNode h) {
HeroNode a=head;
//添加数据是通过找到列表最后的一个数据才可以添加
//这里与下面的打印列表不同,打印列表要打印辅助变量指向的
//当前对象的信息,所以循环判断的条件不同,同样赋予
//辅助变量也不同,在添加时寻找列表最后通过判断该值的next是否为空
//而打印时则要判断该值是否为空
while(true) {
if(a.next==null) {
break;
}
a=a.next;
}
a.next=h;
}
public void list() {
if(head.next==null) {
System.out.println("链表为空");
return;
}
HeroNode a=head.next;
while(true) {
if(a==null) {
break;
}
System.out.println(a);
a=a.next;//输出当前Hero对象信息后将a指向后一个
//接着判断该对象是否为空即是否有数据可以输出
}
}
有序单向链表
关键是找到插入的节点,然后改变节点next的指向即可
一方面先将插入节点设为要插入的前一个节点,在判断好插入节点后
先将前一个节点的next指向加入的节点,再使得加入的节点指向原来的下一个节点。
public void add(HeroNode h) {
HeroNode n=head;
boolean a=false;//是否可加入的标志
while(true) {
if(n.next==null) {//循环到队列最后则直接退出
break;
}
if(h.no==n.no) {//循环时找到相同的编号说明已加入
a=true; //改变标志表明不可加入
break;
}
if(n.next.no > h.no) {
break;
}
n=n.next; //循环节点向后移动
}
if(a) {
System.out.println("该英雄人物"+n.name+"已加入");
}else {
h.next=n.next;
n.next=h;
}
}
修改:
通过创建一个change函数完成修改,一般根据其number(不可变量),遍历找到该节点,然后修改内容即可。
在测试或主函数中只需创建一个新的节点修改部分内容,再调用change函数即可。
public void change(HeroNode h) {
HeroNode n=head;
boolean a=false;
while(true) {
if(n.next==null) {
break;
}
if(n.no==h.no) {
a=true;
break;
}
n=n.next;
}
if(a) {
n.name=h.name;
n.nickName=h.nickName;
}else {
System.out.println("该英雄未加入");
}
}
删除:
操作类似于修改,只是找到删除节点的前一个节点,将该节点的next指向删除节点的下一个节点。
public void del(int no) {
HeroNode n=head;
boolean a=false;
while(true) {
if(n.next==null) {
break;
}
if(n.next.no==no) {
a=true;
break;
}
n=n.next;
}
if(a) {
n.next=n.next.next;
}else {
System.out.println("该英雄未加入");
}
}
以上是关于链表-java数据结构的主要内容,如果未能解决你的问题,请参考以下文章