出去玩
1、本来是周五下午就出去玩
2、不过因为闺蜜周六有考试呢,所以就放在周六吧
3、都计划了很多事情,这周就统统实现了去
上篇文章就不公开了,不过呢,这周天晚上我更新下文章,我们出去玩拍的照片,专门在写一篇文章
数据结构-单链表
package com.xiaonan.linkedlist;
public class SingleLinkedListDemo {
public static void main(String[] args) {
//HeroNode heroNode1=new HeroNode(1,"11","111");
//HeroNode heroNode2=new HeroNode(2,"11","111");
//HeroNode heroNode3=new HeroNode(3,"11","111");
//HeroNode heroNode4=new HeroNode(4,"11","111");
//HeroNode heroNode5=new HeroNode(5,"11","111");
//SingleLinkedList singleLinkedList=new SingleLinkedList();
//singleLinkedList.add(heroNode1);
//singleLinkedList.add(heroNode2);
//singleLinkedList.add(heroNode3);
//singleLinkedList.add(heroNode4);
//singleLinkedList.addbyorder(heroNode1);
//singleLinkedList.addbyorder(heroNode3);
//singleLinkedList.addbyorder(heroNode2);
//singleLinkedList.addbyorder(heroNode4);
//singleLinkedList.list();
//singleLinkedList.addbyorder(heroNode1);
//singleLinkedList.addbyorder(heroNode5);
//singleLinkedList.list();
//HeroNode heroNode5=new HeroNode(3,"33","333");
//singleLinkedList.delete(heroNode5);
//singleLinkedList.list();
}
}
//定义一个SingleLinkedList,管理英雄
class SingleLinkedList{
//先初始化一个头节点,头节点不要动,不存放数据
private HeroNode head=new HeroNode(0," ","");
//添加
//思路:不考虑编号顺序
//1:找到当前链表的最后节点
//2:将最后这个节点的next指向新节点
public void add(HeroNode heroNode){
//因为head节点不能动,因此我们需要一个辅助变量 temp
HeroNode temp=head;
//遍历链表 到最后
while(true){
if(temp.next==null){
break;
}
//如果没有找到,那我们就后移
temp=temp.next;
}
//当退出while的时候,temp就指向了最后
temp.next=heroNode;
}
//第二种添加方式,根据排名将英雄添加到指定位置
//如果有这个排名,则添加失败,并给出提示
public void addbyorder(HeroNode heroNode){
//头节点不能动,所以必须通过一个辅助变量
HeroNode temp=head;
Boolean flag=false;//标志添加的编号是否存在 默认为false
while(true){
if(temp.next==null){
//链表已经到最后了
break;
}
if(temp.next.no>heroNode.no){
break;
}else if(temp.next.no==heroNode.no){
//编号存在
flag=true;
break;
}
temp=temp.next;
}
//判断false的值
if(flag){
//编号存在
System.out.println("准备插入的英雄"+heroNode+"存在");
}else{
//插入到链表中
heroNode.next=temp.next;
temp.next=heroNode;
}
}
//修改节点的信息,根据No编号来修改,即no编号不能修改
public void update(HeroNode heroNode){
//判断是否为空
if(head.next==null){
System.out.println("链表为空");
return;
}
HeroNode temp=head.next;
//寻找no编号的节点
//Boolean flag=false;//标志添加的编号是否存在 默认为false
while(true){
if (temp==null){
break;
}
if(temp.no==heroNode.no){
//找到了
//flag=true;
temp.name= heroNode.name;
temp.nickname= heroNode.nickname;
break;
}
temp=temp.next;
}
}
public void delete(HeroNode heroNode){
HeroNode temp=head;
//寻找no编号的节点
while(true){
if(temp.next==null){
break;
}
if(temp.next.no==heroNode.no){
temp.next=temp.next.next;
break;
}
temp=temp.next;
}
}
public void list(){
//先判断是否为空
if(head.next==null){
System.out.println("链表为空");
return;
}
//因为头节点不能动,所以我们需要一个辅助节点
HeroNode temp=head.next;
while(true){
if(temp==null){
break;
}
//输出节点的信息
System.out.println(temp);
//temp后移
temp=temp.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;
this.next = next;
}
@Override
public String toString() {
return "HeroNode{" +
"no=" + no +
", name='" + name + '\'' +
", nickname='" + nickname + '\'' +
'}';
}
}
注意
1、单链表操作其实就是节点节点之间操作
2、修改与查找(我这里没有写),这俩比较简单
3、添加(顺序添加)和删除,这俩模块比较可能绕点。不过我把重点代码贴在下面
4、添加条件temp.next.no>heroNode.no,实现代码heroNode.next=temp.next;temp.next=heroNode;
5、删除条件temp.next.no==heroNode.no,实现代码temp.next=temp.next.next;
6、大家都发现了吧,添加和修改都是当前节点的下一个节点去操作