java-链表-练习:_程序猿小飞的博客-程序员秘密

技术标签: Java  java  链表  

java-链表-练习:

package com.etc.liebiao;

/**
 *  链表的简单联系与理解
 */
public class LbMonkey {
    public int id ;            // 编号
    public String name;        // 名字
    public LbMonkey next;      // 它表示后面的猴子


    public LbMonkey(){}

    // ctrl + o

    public LbMonkey(int id ,String name){
        this.id = id;
        this.name = name;
    }

    //  重写父类方法:最终输出的格式:
    @Override
    public String toString() {
        return String.format("(%s,%s)",name, id);
    }
}

package com.etc.liebiao;

/**
 * 相对于数组,链表的特点:
 * 1.可以无限多节点,长度不限制;
 * 2.无论插入还是删除,并不需要挪动位置;
 *
 *  有头节点需要在最前面创建一个假节点:83行
 */
public class LbMonkeyM {
    public static void main(String[] args) {

        //  4只猴子(四个有效的节点)
        LbMonkey m1 = new LbMonkey(100, "yuanyuan");
        LbMonkey m2 = new LbMonkey(101, "fangfang");
        LbMonkey m3 = new LbMonkey(102, "yuyu");
        LbMonkey m4 = new LbMonkey(103, "yuayua");

        // 串起来,每个猴子握住前者的尾巴
        m1.next = m2;
        m2.next = m3;
        m3.next = m4;
        m4.next = null;

        // 遍历一个列表需要知道第一节点,便可以遍历全部;(没有假节点时候的遍历)
//        LbMonkey node = m1;
//        while (node != null){
//            System.out.println(node);
//            node = node.next;
//        }


        //   队伍新插入一个节点 m5;
        LbMonkey m5 = new LbMonkey(105, "hh");

        //  如果重新插入最后节点时,需要找到最后一个节点,再选择插入。
//
//        LbMonkey  tail = m1;
//        while (true){
//        // 如果tail 后面的那个猴子为空,则他就是最后一个猴子。所以跳出循环;
//            if (tail.next == null) break;
//            tail = tail.next;
//        }
//        tail.next = m5;   // 把m5 追加到 tail的末尾


        //  如果插入第一个之后,第二个之前;

//        LbMonkey  head = m1;
//        m5.next = head.next;    // 把第一个后面的猴子m 5放在插入猴子后面
//        m1.next = m5;           // 再把 m 5 猴子放在第一个猴子后面


        //  如果插入固定位置插入102 后面:

//        LbMonkey head1 = m1;
//        while ( head1 != null){
//            if ( head1.id == 102){
//                m5.next = head1.next;
//                head1.next = m5;
//                break;
//            }
//            head1 = head1.next;
//        }


        //  删除节点(此时删除的是:id= m5 的节点)
//        LbMonkey h = m1;
//        while (h != null){
//            if (h.id == 105){
//              h.next = m5.next;
//              break;
//            }
//            h = h.next;
//        }







        /**
         *  加上假节点以后操作:
         */

        //  创建一个假节点,作为链表的头节点
        LbMonkey hea = new LbMonkey(0,"石猴");
            hea.next = m1;

        // 增加节点(直接加到假加点后面)
//        LbMonkey m6 = new LbMonkey(106, "huahua");
//        m6.next = hea.next;    //  增加时:把假节点之前后面的那个“hea.next” 放在m6节点后面。
//        hea.next = m6;         //  然后把 节点m6 放在 假节点后面。“hea.next”



        // 第一种:删除节点(加上假节点后的删除节点): 自创
//        LbMonkey h = hea.next;
//        while (h != null) {
//            if (h.id == 106) {
//                hea.next = h.next;
//                break;
//            }
//            h = h.next;
//        }

        // 第二种:删除节点(加上假节点后的删除节点):  师

        LbMonkey  H = hea;
        while ( H.next != null){
            if (H.next.id == 106){
                H.next = H.next.next;
                break;
            }
            H = H.next;
        }


        //   加上假节点以后的遍历和不加假节点的遍历不同;(有假节点时候的遍历)
        LbMonkey node = hea.next;
        while (node != null) {
            System.out.println(node);
            node = node.next;
        }

        System.out.println("exit");
    }
}

注意:当把列表作为容器的时候:(示例)

package com.etc.liebiao;

/**
 *   容器类: 一般不需要知道里面是如何实现的,链表是一种实现容器的方法,确切的说是一种数据结构。
 */
public class MonkeyList {

    private LbMonkey head = new LbMonkey(0,"石猴");

    // 添加一个对象
    public void add(LbMonkey m){
        m.next = head.next;
        head.next = m;
    }

    // 按编号查询
    public LbMonkey get( int id){
        LbMonkey m = head.next;
        while (m != null) {
            if ( m.id == id){
                return m;
            }
            m = m.next;
        }
        return null;
    }
}

package com.etc.liebiao;

/**
 * @Date 2020/10/30 19:08
 * @CREATE BY sinosoftcs
 * @DESCRIPTION TODO
 * @MODIFIED
 */
public class MonkeyM {
    public static void main(String[] args) {

        //  4只猴子(四个有效的节点)
        LbMonkey m1 = new LbMonkey(100, "yuanyuan");
        LbMonkey m2 = new LbMonkey(101, "fangfang");
        LbMonkey m3 = new LbMonkey(102, "yuyu");
        LbMonkey m4 = new LbMonkey(103, "yuayua");

        MonkeyList monkey = new MonkeyList();
        monkey.add(m1);
        monkey.add(m2);
        monkey.add(m3);
        monkey.add(m4);

        LbMonkey who = monkey.get(103);
        if (who != null){
            System.out.println("找到 :" + who);
        }else {
            System.out.println("没有找到id为103的猴子!");
        }
        System.out.println("exit");
    }
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43617838/article/details/109407583

智能推荐

视频教程- 桫哥-GOlang基础-14图形用户界面-Go语言_weixin_32221583的博客-程序员秘密

桫哥-GOlang基础-14图形用户界面 多年互联网从业经验;有丰富的的...

PAT甲级 -- 1042 Shuffling Machine (20 分)_名字被猪吃掉了的博客-程序员秘密

Shuffling is a procedure used to randomize a deck of playing cards. Because standard shuffling techniques are seen as weak, and in order to avoid "inside jobs" where employees collaborate with gambler...

Ubuntu——home扩容_ubuntu home扩容_William.csj的博客-程序员秘密

一、参考文章UBUNTU /HOME扩容二、注意事项启动的时候,u盘的ubuntu版本需要和原来系统中的ubuntu版本一致解锁根据空白盘符与其相临近盘符,进行互相调换,直至调至home所在盘的前面或后面。(移动的时候,条形的框的长度不要改动,直接拖)扩容(长度拉满即为扩容)...

java8获取方法的参数名称_liuzx430524的博客-程序员秘密

参考这篇文章: http://www.concretepage.com/java/jdk-8/java-8-reflection-access-to-parameter-names-of-method-and-constructor-with-maven-gradle-and-eclipse-using-parameters-compiler-argument#maven按照文章里给的demo

TensorFlow环境下安装jupyter notebook后,cmd打开出现cannot import name 'ensure_dir_exists'_走的那么干脆的博客-程序员秘密

最近按照TensorFlow官网给的在windows下利用Anaconda安装tensorflow的方法,遇到不少问题,安装过程具体如下:(1)以管理员身份运行Anaconda Prompt(2)输入以下命令创建tensorflow环境conda create -n tensorflow pip python=3.5以这种创建环境的方式安装tensorflow可以在Anaco...

Windows10远程登陆Ubuntu桌面_windows远程ubuntu桌面_Rosen.的博客-程序员秘密

简介 我们在使用Ubuntu系统有时可能需要看Ubuntu上的仿真界面和可视化数据,可能会有这样一个需求:使用Windows系统接入Ubuntu,本文章提供一种方法,使用Windows自带的远程桌面+Ubuntu安装VNC解决问题。Ubuntu上的配置1.下载配置dconfsudo apt-get install xrdp vnc4server xbase-clients dconf-editor 注意上面红框的路径,把下面两项设为OFF。2. 设置Ubuntu系统 在Sharing里面打

随便推点

前端table表格循环_table循环_漫不经心a的博客-程序员秘密

for(var i = 0;i < row.length;i++){ var row = row[i]; $('#detailsTable2 tr').each(function(i){ // 遍历 tr // $(this).children('td').each(function(j){ // 遍历 tr 的各个 td // }); ...

matlab的cylinder函数,Matlab基本函数-cylinder函数 | 学步园_常河的博客-程序员秘密

1、cylinder函数:绘制三维圆柱图2、用法说明:(1)[x,y,z]=cylinder 函数返回一半径和高度都为1的圆柱体x,y,z轴的坐标值,圆柱体沿其周长有20个等距分布的点(2)[x,y,z]=cylinder(r) 函数一个半径为r、高度为1的圆柱体的x,y,z轴的坐标值,圆柱体沿其周长有20个等距分布的点(3)[x,y,z]=cylinder(r,n) 函数一个半径为r、高度为1的...

git ssh key配置_git sshkey_Turn X7的博客-程序员秘密

git clone支持https和git(即ssh)两种方式下载源码:当使用git方式下载时,如果没有配置过ssh key,则会有如下错误提示:下面就介绍一下如何配置git的ssh key,以便我们可以用git方式下载源码。首先用如下命令(如未特别说明,所有命令均默认在Git Bash工具下执行)检查一下用户名和邮箱是否配置(github支持我们用用户名或邮箱登录):git config --global --list 笔者的机器显示信息如下(已配置):如未配置,则执.

Ubuntu18.04下将Python版本默认设置为Python3_dev_zyx的博客-程序员秘密

注: Ubuntu 18.04自带Python3!!! 1 查看Python版本先查看系统中有那些Python版本:$ ls /usr/bin/python*/usr/bin/python /usr/bin/python2-config /usr/bin/python3m/usr/bin/python2 /usr/bin/pyth...

HTML→标签、div语义化、表单、input标签_input标签是语义标签吗_极小双的博客-程序员秘密

HTML超文本标记语言(HyperTextMark-upLanguage)大道废,有仁义;智慧出,有大伪;六亲不和,有孝慈;国家昏乱,有忠臣。————《道德经》第十八章...

websocket本地正常,部署到服务器连不上_qq_42190640的博客-程序员秘密

线上连接错误解决方法:1.开放服务器端口2.用IP地址加端口连接websocket = new WebSocket(`ws://119.23.41.159:9985/api/bigdata`)