单链表的创建和增删改查实现
Posted z啵唧啵唧
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单链表的创建和增删改查实现相关的知识,希望对你有一定的参考价值。
节点类的定义
/*
* 节点类,用来定义结点的信息和引用
* */
class Hero_Node{
private int no;
private String name;
private String Hname;
Hero_Node Next_hero;
public Hero_Node(int no, String name, String hname) {
this.no = no;
this.name = name;
Hname = hname;
}
@Override
public String toString() {
return "Hero_Node{" +
"no=" + no +
", name='" + name + '\\'' +
", Hname='" + Hname + '\\'' +
'}';
}
}
单链表类
/*
* 单链表类,在这里对单链表进行初始化,定义头节点,对单链表的添加和遍历单链表
* */
class Singlelinkedlist
{
Hero_Node Head_node = new Hero_Node(0,null,null);//初始化一个头节点
/*
* 添加节点,传的残数就是我们要进行插入的节点
* */
public void add(Hero_Node hero)
{
Hero_Node temp = Head_node; //因为头节点不方便移送,所以先让一个工具节点等于头节点让他进行移动
while (true)
{
//因为要插入节点,采用的是尾插法,所以先要判断头节点的后面是否为空,为空就进行插入
if (temp.Next_hero==null)
{
temp.Next_hero=hero;
//因为在一个死循环的循环体当中,所以插入成功之后一定要记得break,跳出循环
break;
}
//不为空就进行遍历,直到找到找到链表的尾部
else{
temp=temp.Next_hero;
}
}
}
/*
* 遍历单链表
* */
public void See()
{
/*
* 也是先定义一个temp工具节点指向头节点
* */
Hero_Node temp = Head_node;
while (true)
{
/*
* 当前节点不为空的时候就将它的信息打印出来,然后再将当前节点指向下一节点,实现遍历输出
* */
if (temp.Next_hero!=null)
{
System.out.println(temp.Next_hero);
temp=temp.Next_hero;
}
/*
* 当当前节点位空的时候就说明走到最后一个节点了,那么我们就跳出这个死循环
* */
else {
break;
}
}
}
}
按照顺序向单链表中添加元素
/*
* 通过排序进行添加
* */
public void addByOrder(Hero_Node hero)
{
Hero_Node temp = Head_node ;
boolean tag = false;
/*
* 遍历来进行比较插入
* */
while (true)
{
if(temp.Next_hero==null)
{
break;
}
if(temp.Next_hero.getNo()>hero.getNo())
{
break;
}else if(temp.Next_hero.getNo()==hero.getNo()) {//说明编号存在
tag = true;
break;
}else {
/*
* 如果上面的条件都没有满足就说明还没有找到适合插入的位置,就让这个工具节点向后遍历
* */
temp=temp.Next_hero;
}
}
if (tag)
{
System.out.println("插入的位置编号"+hero.getNo()+"已经存在");
}else {//说明找到了想要添加的位置
/*
* 1、让插入进来的节点指向原先temp节点的指向
* 2、然后让temp执行新插入进来的节点
* */
hero.Next_hero=temp.Next_hero;
temp.Next_hero=hero;
}
}
对节点信息进行修改
/*
* 对单链表的修改功能编写
* */
public void upDate(Hero_Node newhero)
{
/*
* 1、先拿到一个工具节点,指向头节点
* */
Hero_Node temp = Head_node;
/*
* 2、遍历找出需要修改的节点
* */
while (true)
{
/*
* 3、找到了就对他进行修改
* */
if(temp.Next_hero==null) {
System.out.println("不存在节点编号为"+newhero.getNo()+"的节点");
break;
}
else if(temp.Next_hero.getNo()==newhero.getNo())
{
temp.Next_hero.setName(newhero.getName());
temp.Next_hero.setHname(newhero.getHname());
break;
}
else {
/*
* 4、找不到就继续向后遍历
* */
temp=temp.Next_hero;
}
}
}
对节点进行删除
/*
* 对单链表的删除功能进行编写
* */
public void delete(int no)
{
Hero_Node temp = Head_node;
while (true)
{
if (temp.Next_hero==null)
{
System.out.println("删除的编号为"+no+"的英雄不存在");
break;
}
else if(temp.Next_hero.getNo()==no)
{
/*
* 如果temp的下一个节点就是我们想要删除的节点,那么我们就让temp这个节点直接指向temp节点下一节点的下一节点,越过了这个删除的这个节点
* 当被删除的这个节点没有节点指向她的时候,jvm当中的垃圾回收机制就会将这个节点进行清理
* */
temp.Next_hero=temp.Next_hero.Next_hero;
break;
}
else {
temp=temp.Next_hero;
}
}
}
以上是关于单链表的创建和增删改查实现的主要内容,如果未能解决你的问题,请参考以下文章