插入 //单链表的增删改查
package com.company;
//单链表的创建带头节点的
import java.awt.*;
class ist{
public static void main(String[] args) {
}
}
//定义SingleLinkedList来管理我们的英雄
class SingleLinkedList{
//先初始化一个头节点,头节点不要动,不存放具体的数据
private HeroNode head=new HeroNode();
//添加节点到单向链表到链表的最后
//找到列表的最后的节点
//将最后节点的next指向新的节点
public void add(HeroNode heroNode){
//head节点不能动,需要一个辅助遍历temp
HeroNode temp=head;
//遍历链表
while(temp.next!=null){
temp=temp.next;
};
//此时的temp就是最后的节点
//将最后的节点next指向新的节点
temp.next=heroNode;
}
//根据节点的排名或者说是编号来出入节点//如果有这个排名,则添加失败,并给出提示
public void addByOrder(HeroNode heroNode){
//头节点不能动,要引入辅助指针来遍历来找到添加的位置
HeroNode temp=head;
boolean flag=false;//flag标志添加的标号已经存在,默认为false
while(true){
if(isEmpty()){//temp已经在链表的最后//加入空节点
break;
}if(temp.next.no>heroNode.no){//位置找到了就在temp的后面插入
break;
}if(temp.next.no==heroNode.no){
flag=true;//说明编号存在
break;
}
temp=temp.next;//后移,遍历当前链表
}
//判断flag的值、
if (flag){
System.out.println("编号存在"+ heroNode.no);
}else{
//插入temp后面到链表中
heroNode.next=temp.next;
temp.next=heroNode; }
}
//单链表的修改,对某个节点的修改,这里是根据编号no进行修改。。编号不变名字和昵称改变
//根据newheronode的no来修改即可
public void updata(HeroNode newheronode){
//判断是否为空
if(isEmpty()){
System.out.println("链表为空");
}
HeroNode temp=head.next;
boolean flag=false;//表示是否找到改节点
while (true){
if(temp==null){
break;//到了链表的结尾了,即没有找到节点
}
if(temp.no==newheronode.no){
flag=true;
break;
}
temp=temp.next;
}
//根据flag判断是否找到要修改的节点
if(false==true){
temp.name=newheronode.name;
temp.nickname=newheronode.nickname;
}else {
System.out.println("没有找到");
}
}
//删除节点,根据编号来删除来删除节点
public void del(int no){
HeroNode temp=head;
boolean flag=false;//标志是否找到待删除节点的
while (true){
if (temp.next==null){
break;
}if(temp.next.no==no){//找到了待删除节点的前一个节点
flag=true;
break;
}
temp=temp.next;
}
if(false){
temp.next=temp.next.next;
}else {
System.out.println("要删除的节点不存在");}
}
//判断链表是否为空
public boolean isEmpty(){
return head.next==null;
}
//显示链表
public void list(){
if (isEmpty()){
System.out.println("链表为空");
}else{
HeroNode temp=head.next;
while (true){
//判断是否到链表最后
if(temp==null){
break;
}
//输出节点的数据
System.out.println(temp.toString());
temp=temp.next;
}
}
}
}
//定义HeroNode,每个HeroNode对象就是一个节点
class HeroNode{
public int no;//定义编号或者说是排名
public String name;
public String nickname;//定义昵称
public HeroNode next;//指向下一个节点next是一个HeroNode的类
public HeroNode(){
}
public HeroNode(int no,String name,String nickname){
this.no=no;
this.name=name;
this.nickname=nickname;
}
//为了显示方法。重写to
@Override
public String toString(){
return "HeroNode [no="+no+",name="+name+",nickname="+nickname;
}
}