package com.线性表.链表;
/**
* 单向链表
* @author wangcong
* @date 2021/11/17 22:15:23
* @update 2021/11/17 22:15
*/
public class SingleLinkList {
//先初始化一个头节点,头节点不要动,不存放数据,
private HeroNode head=new HeroNode(0,"","");
//添加节点
//判断下一个结点是否为空,若空,则直接将要添加的结点添加在链尾
//当不考虑编号的顺序时
/**
* 1、找到单签链表的最后节点
* 2、将最后这个节点的next 指向 新的结点
* @param heroNode
*/
public void addHero(HeroNode heroNode){
//因为head结点不能动,因此我们需要一个辅助结点指向头结点
HeroNode temp=head;
//遍历链表找到链表的最后那一个结点
while (true){
//找到链表的最后
if(temp.next==null){
break;
}
//若没有找到最后的那一个结点,将temp往后移动
temp=temp.next;
}
//退出while循环时,temp就指向了链表的最后的那一个结点
temp.next=heroNode;
}
/**
* 按照英雄编号id值进行添加,从小到大的顺序添加
*/
public void addOrder(HeroNode heroNode){
//因为head结点不能动,因此我们需要一个辅助结点指向头结点
HeroNode temp=head;
//flag是用于判断是否该英雄的编号已经存在,默认为FALSE
boolean flag=false;
while (true){
//说明temp已经是链表的最后
if(temp.next==null){
break;
}
if(temp.next.no>heroNode.no){
//位置找到,当前这个节点,应当加入到temp的后面---【头结点是不能动的】
break;
}else if(temp.next.no==heroNode.no){
//该编号已经有英雄了,不能再加入了
flag=true;
break;
}
// 指针后移
temp=temp.next;
}
if(flag){
//不可以加入
System.out.println("该编号已经有英雄了,不能再加入了"+heroNode.no);
}else {
//加入,注意加入的顺序
heroNode.next=temp.next;
temp.next=heroNode;
}
}
//遍历链表
public void list(){
//判断链表是否为空
if(head.next==null){
System.out.println("链表为空");
return;
}
//因为head结点不能动,因此我们需要一个辅助结点指向头结点
HeroNode temp=head;
while (true){
//判断是否到链表的最后
if(temp==null){
break;
}
//输出结点的信息
System.out.println(temp);
//将temp后移
temp=temp.next;
}
}
/**
* 修改结点
*/
public void updateNode(HeroNode heroNode) {
/**
* 如果链表为空
*/
if (head.next == null) {
System.out.println("链表为空");
return;
}
//先找到该节点的位置,再进行修改
//头结点是不能动的
HeroNode temp=head.next;
//判断找到该节点的标志符
boolean flag=false;
while (true){
//到链尾,依旧没找到
if(temp.next==null){
break;
}
if(temp.no==heroNode.no){
//找到该节点
flag=true;
break;
}
temp=temp.next;
}
if(flag){
temp.name=heroNode.name;
temp.nickName=heroNode.nickName;
}else{
System.out.println("未找到该节点");
}
}
/**
* 节点的删除
* 根据节点的编号删除
*/
public void deleteNode(int id){
HeroNode temp=head;
boolean flag=false;
while (true){
if(temp.next==null){
//没有该编号的结点,所以无需删除
break;
}
if(temp.next.no==id){//找到要删除的结点
flag=true;
break;
}
temp=temp.next;
}
if(flag){
temp.next=temp.next.next;
}else {
System.out.println("没有该编号的结点,所以无需删除");
}
}
}
测试代码:
package com.线性表.链表;
/**
* 测试单向链表
* @author wangcong
* @date 2021/11/17 22:36:51
* @update 2021/11/17 22:36
*/
public class SingleListTest {
public static void main(String[] args) {
SingleLinkList linkList=new SingleLinkList();
HeroNode heroNode1=new HeroNode(1,"肖战","小兔子");
HeroNode heroNode2=new HeroNode(5,"王一博","老虎");
HeroNode heroNode3=new HeroNode(6,"战战","11");
HeroNode heroNode4=new HeroNode(9,"肖1战","11小兔子");
HeroNode heroNode5=new HeroNode(21,"22肖战","22小兔子");
/*linkList.addHero(heroNode1);
linkList.addHero(heroNode2);
linkList.addHero(heroNode3);
linkList.addHero(heroNode4);
linkList.addHero(heroNode5);*/
linkList.addOrder(heroNode1);
linkList.addOrder(heroNode2);
linkList.addOrder(heroNode3);
linkList.addOrder(heroNode4);
linkList.addOrder(heroNode5);
linkList.list();
System.out.println("---------------------------");
linkList.updateNode(new HeroNode(9,"王长春","纯粹"));
linkList.list();
System.out.println("---------------------------");
linkList.deleteNode(9);
linkList.list();
}
}
输出:
HeroNode{no=0, name='', nickName='', next=HeroNode{no=1, name='肖战', nickName='小兔子', next=HeroNode{no=5, name='王一博', nickName='老虎', next=HeroNode{no=6, name='战战', nickName='11', next=HeroNode{no=9, name='肖1战', nickName='11小兔子', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}}}}}
HeroNode{no=1, name='肖战', nickName='小兔子', next=HeroNode{no=5, name='王一博', nickName='老虎', next=HeroNode{no=6, name='战战', nickName='11', next=HeroNode{no=9, name='肖1战', nickName='11小兔子', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}}}}
HeroNode{no=5, name='王一博', nickName='老虎', next=HeroNode{no=6, name='战战', nickName='11', next=HeroNode{no=9, name='肖1战', nickName='11小兔子', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}}}
HeroNode{no=6, name='战战', nickName='11', next=HeroNode{no=9, name='肖1战', nickName='11小兔子', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}}
HeroNode{no=9, name='肖1战', nickName='11小兔子', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}
HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}
---------------------------
HeroNode{no=0, name='', nickName='', next=HeroNode{no=1, name='肖战', nickName='小兔子', next=HeroNode{no=5, name='王一博', nickName='老虎', next=HeroNode{no=6, name='战战', nickName='11', next=HeroNode{no=9, name='王长春', nickName='纯粹', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}}}}}
HeroNode{no=1, name='肖战', nickName='小兔子', next=HeroNode{no=5, name='王一博', nickName='老虎', next=HeroNode{no=6, name='战战', nickName='11', next=HeroNode{no=9, name='王长春', nickName='纯粹', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}}}}
HeroNode{no=5, name='王一博', nickName='老虎', next=HeroNode{no=6, name='战战', nickName='11', next=HeroNode{no=9, name='王长春', nickName='纯粹', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}}}
HeroNode{no=6, name='战战', nickName='11', next=HeroNode{no=9, name='王长春', nickName='纯粹', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}}
HeroNode{no=9, name='王长春', nickName='纯粹', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}
HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}
---------------------------
HeroNode{no=0, name='', nickName='', next=HeroNode{no=1, name='肖战', nickName='小兔子', next=HeroNode{no=5, name='王一博', nickName='老虎', next=HeroNode{no=6, name='战战', nickName='11', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}}}}
HeroNode{no=1, name='肖战', nickName='小兔子', next=HeroNode{no=5, name='王一博', nickName='老虎', next=HeroNode{no=6, name='战战', nickName='11', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}}}
HeroNode{no=5, name='王一博', nickName='老虎', next=HeroNode{no=6, name='战战', nickName='11', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}}
HeroNode{no=6, name='战战', nickName='11', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}
HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}
Process finished with exit code 0
二、链表---单链表
最新推荐文章于 2024-09-20 06:50:08 发布