栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java实现单链表

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java实现单链表

文章目录
      • 1. 定义结点类
      • 2. 定义SinglelinkedList类 实现链表操作
      • 3. 测试单链表

1. 定义结点类
//定义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;
    }

    @Override
    public String toString() {
        return "HeroNode[" +
                "no=" + no +
                ", name='" + name + ''' +
                ", nickname='" + nickname+"'"+"]";
    }

2. 定义SinglelinkedList类 实现链表操作
1.add(Heronode heroNode)    添加节点到单向链表 的方法
2. list()     遍历显示链表
3. updata(Heronode node)   修改节点信息的方法
4. deleteNode(Heronode node)   删除指定节点(1)
5. delete(int no)  删除指定节点(2)
6. length(Heronode head)  获取到单链表的结点的个数
 class SinglelinkedList{
        //初始化头结点
        private HeroNode head = new HeroNode(0,"","");

        public HeroNode getHead() {
            return head;
        }

        //添加节点到单向链表 的方法
        public void add(HeroNode heroNode){
            HeroNode temp = head;
            while(true){
                if(temp.next == null){
                    break;
                }
                temp = temp.next;
            }
            temp.next = heroNode;
        }

        //遍历显示链表
        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;
            }
        }

        //修改节点信息的方法
        public void updata(HeroNode node){
            if (head.next == null){
                System.out.println("链表为空");
                return;
            }
            HeroNode temp = head.next;
            boolean flag = false;
            while(true){
                if (temp == null){
                    break;//已经遍历完链表
                }
                if (temp.no == node.no){
                    //找到节点
                    flag = true;
                    break;
                }
                temp = temp.next;  //向下一个节点移动
            }
            if (flag){
                //找到节点,进行信息修改
                temp.name = node.name;
                temp.nickname = node.name;
                System.out.println("修改成功");
            }else {
                //未找到节点
                System.out.printf("没有找到编号为 %d的节点,无法修改信息",node.no);
                System.out.println();
            }

        }

        //删除指定节点(1)
        public  void deleteNode(HeroNode node) {
            node.no = node.next.no;
            node.name = node.next.name;
            node.nickname = node.next.nickname;
            node.next = node . next. next ;
        }
        //删除指定节点(2)
        public void delete(int no){
            HeroNode temp = head;
            boolean flag = false;
            while (true){
                if (temp.next == null){
                    //遍历完
                    System.out.println("无满足条件的节点,无法删除");
                    return;
                }
                if (temp.next.no == no){
                    flag = true;
                    break;
                    //找到要删除的节点的上一个结点    {temp}  {需要删除的node}
//                temp.next = temp.next.next;
                }
                temp = temp.next;
            }
            if (flag){      //flag为true找到需要删除的上一个结点temp
                temp.next = temp.next.next;
            }else{
                System.out.println("无满足条件的结点,无法删除");
            }

        }

    ///方法:获取到单链表的结点的个数(如果是带头结点的链表,需求不统计头结点)
    public int length(HeroNode head){

        if (head.next == null){
            return 0;
        }
        HeroNode temp = head.next;
        int length = 0;
        while (temp != null){
            length++;
            temp = temp.next;
        }
        return length;
    }

}
3. 测试单链表
public class SinglelinkedListDemo {
    public static void main(String[] args) {
        //创建节点,填入信息
        HeroNode heroNode1 = new HeroNode(1,"地虎铠甲","地虎侠");
        HeroNode heroNode2 = new HeroNode(2,"炎龙铠甲","炎龙侠");
        HeroNode heroNode3 = new HeroNode(3,"黑犀铠甲","黑犀侠");
        //创建链表
        SinglelinkedList singlelinkedList = new SinglelinkedList();
        //添加节点到链表中
        singlelinkedList.add(heroNode1);
        singlelinkedList.add(heroNode2);
        singlelinkedList.add(heroNode3);
        singlelinkedList.list();
        //测试删除节点
     

      

  
        //测试统计有效节点
        System.out.println("-----------------");
        int length  = singlelinkedList.length(singlelinkedList.getHead());
        System.out.println(length);
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/631988.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号