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");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值