带头单链表的增删改查

news/2024/7/4 8:13:02

用带头的单链表来实现——水浒英雄排行榜的增删改查操作

  • 代码块如下
public class singleLinkedListDemo {
    public static void main(String[] args) {
        HeroNode hero01 = new HeroNode(1, "宋江", "及时雨");
        HeroNode hero02 = new HeroNode(2, "卢俊义", "玉麒麟");
        HeroNode hero03 = new HeroNode(3, "吴用", "智多星");
        HeroNode hero04 = new HeroNode(4, "林冲", "豹子头");
        LinkedList linkedList = new LinkedList();
        linkedList.add(hero01);
        linkedList.add(hero02);
        linkedList.add(hero03);
        linkedList.add(hero04);
        linkedList.list();
        //测试删除单链表 linkedList.delete(hero03);
        //linkedList.list();
        HeroNode newHero= new HeroNode(3, "孙二娘", "母夜叉");
        linkedList.update(newHero);
        linkedList.list();
    }
}
//定义一个类来管理我们的英雄
class LinkedList{
    //创建单链表的头结点,且头结点为空。
    HeroNode Head=new HeroNode(0," "," ");
    //向单链表中添加元素
    public void add(HeroNode heroNode){
        HeroNode temp=Head;
        //遍历链表,找到最后
        while (true){
            if (temp.next==null){
                break;
            }
            temp=temp.next;
        }
        temp.next=heroNode;
    }
    //修改节点为no的属性
    public HeroNode update(HeroNode newheroNode){
        if (Head.next==null){
            System.out.println("单链表为空,无节点可以修改");
        }
        HeroNode temp=Head;
        //这里引入falg是用来判断是否有该节点的编号
        boolean flag=false;
        while (true){
            if (temp.next.no==newheroNode.no){
                flag=true;
                break;
            }
            temp=temp.next;
        }
        if (flag==true){
            temp.next.name=newheroNode.name;
            temp.next.nickname=newheroNode.nickname;
        }else {
            System.out.printf("找不到节点为%d对应的HeroNode");
            System.out.println();
        }
        return temp.next;
    }
    //删除节点,头结点以及被删除节点之前都不能动,后面每个都要向前移动一位
    public void delete(HeroNode deleteNode){
        if (Head.next==null){
            System.out.println("单链表为空,无法删除任何节点");
            return;
        }
        HeroNode temp=Head;
        boolean flag=false;//和上面一样用来盘段有没有此节点
        while (true){
            if (temp.next.no==deleteNode.no){
                flag=true;
                break;
            }
            temp=temp.next;
        }
        if (flag=true){
            temp.next=temp.next.next;
        }else {
            System.out.printf("找不到节点为%d对应的HeroNode");
            System.out.println();
        }
    }
    //显示链表
    public void list(){
        System.out.println("当前单链表为:");
        if (Head.next==null){
            System.out.println("该单链表为空,无节点以及数据可以显示");
            return;
        }
        HeroNode temp=Head;
        while (true){
            if (temp==null){
                break;
            }
            System.out.println(temp);
            temp=temp.next;
        }
    }
}
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[no=0,name= ,nickname= ]
HeroNode[no=1,name=宋江,nickname=及时雨]
HeroNode[no=2,name=卢俊义,nickname=玉麒麟]
HeroNode[no=3,name=吴用,nickname=智多星]
HeroNode[no=4,name=林冲,nickname=豹子头]


http://www.niftyadmin.cn/n/3069163.html

相关文章

项目实施

项目实施前应准备的材料: 1:根据项目经理提供的设备清单,确定项目现场有哪些设备,服务器及终端盒子的数量,矩阵,编码器等设备是否必须。 2:查看系统图,看各个设备的链路及信号是否与…

用数组模拟队列

思路导图 代码块如下 public class ArrayQueueDemo {public static void main(String[] args) {//先新建一个ArrayQueue类ArrayQueue queue new ArrayQueue(3);Scanner scanner new Scanner(System.in);char key ;//key用来接收用户从键盘输入要添加的数字boolean looptru…

使用Struts 2框架实现文件下载

从服务器发送一个文件到浏览器需要以下几个步骤 把HTTP响应里的ContentType标头设置为被下载文件的内容类型。ContentType标头的作用是表明数据包里的数据是什么类型, 它由一个多媒体类型和一个子类型标识符组成(可以去http://www.iana.org/assignments/…

实验一安卓开发微信页面设计

实验一安卓开发微信页面设计 功能要求: 1.页面具有标题 2.具有四个页面,页面具有底部选择框,同时具有选择事件,当点击选择事件的时候进行页面切换 3.页面内容不超出边界且清晰 思路分析: 该微信界面由三部分组成 1页面…

实验二: 安卓应用UI设计

实验目标和实验内容: 1、掌握UI设计中的layout布局(约束布局)与基本控件(button、text、imageview等); 2、掌握复杂控件与adapter的使用 实验结果:(实验小结与结果截图&#xff09…

使用C++名单在文档处理和学生成绩管理系统相结合

对于学生成绩管理系统,我并不陌生,几乎学习C人的语言。做项目会想到学生成绩管理系统,我也不例外。在研究中的一段时间C语言之后,还用C语言到学生管理系统,然后做几个链接。计数,这个系统是以前的系统上的改…

实验三: 服务与广播

实验目标和实验内容: 1、掌握服务的基本概念,能编写服务过程并进行调用; 2、掌握广播的基本概念,能实现广播通信。 3、需实现的具体功能为: 短信到来时自动产生的系统广播→激活音乐播放服务程序→活动组件程序使得停止…

Nginx的负载均衡 - 最少连接 (least_conn)

Nginx版本:1.9.1 我的博客:http://blog.csdn.net/zhangskd 算法介绍 我们知道轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同。 这有个前提,就是每个请求所占用的后端时间要差不多,如果有些请求占用的时间…