0    课程地址

https://coding.imooc.com/lesson/207.html#mid=13430

 

1    重点关注

1.1    链表插值动画模拟

(可以理解为火车尾加车厢,只不过是火车尾被称为head)

  • 链表头部添加元素

 

 

 

 

 

 

  • 链表中间添加元素

 

 

 

 

 

 

 

 

 

 

2    课程内容

3    Coding

3.1    关键代码

  • 内部类Node

(重点看Node(E e,Node nodeNew)),这个方法是把元素存入当前节点,把指针指向传过来的节点

 

 

/**
     * 1  内部类node
     * @author weidoudou
     * @date 2022/10/28 7:59
     * @return null
     **/
    private class Node{
        //Node 只有两个属性,下一个节点和本节点存储的元素
        private Node next;
        private E e;

        /**
         * 通用调用node方法
         * @author weidoudou
         * @date 2022/10/28 8:17
         * @param e 请添加参数描述
         * @param  nodeNew 请添加参数描述
         * @return null
         **/
        public Node(E e,Node nodeNew){
            this.e = e;
            this.next = nodeNew.next;
        }

        /**
         * node 无参构造
         * @author weidoudou
         * @date 2022/10/28 8:15
         * @return null
         **/
        public Node(){
            this(null,null);
        }

        /**
         * node 有参构造
         * @author weidoudou
         * @date 2022/10/28 8:16
         * @param e 请添加参数描述
         * @return null
         **/
        public Node(E e){
           this(e,null);
        }


        @Override
        public String toString() {
            final StringBuffer sb = new StringBuffer("Node{");
            sb.append("next=").append(next);
            sb.append(", e=").append(e);
            sb.append('}');
            return sb.toString();
        }
    }

 

 

 

  • 链表指定索引添加元素
/**
     * 7  链表添加元素(链表通常不在中间添加元素,编写此段代码完全是为了后续便于理解和二叉树相关知识做铺垫)
     * @author weidoudou
     * @date 2022/10/28 8:45
     * @param index 请添加参数描述
     * @param  e 请添加参数描述
     * @return void
     **/
    public void addElement(int index,E e){
        if(index<0||index>size){
            throw new IllegalArgumentException("索引不正确");
        }

        if(index==0){
            addFirst(e);
        }else{
            Node pre = head;
            for(int i = 0;i<index-1;i++){
                pre = pre.next;
            }

            /*Node nodeNew = new Node(e);
            nodeNew.next = pre.next;
            pre.next = nodeNew;*/

            //优雅写法
            pre.next = new Node(e,pre.next);
            size++;
        }
    }

 

3.2    全量代码(链表添加元素)

package com.company;

/***
 * 链表
 * @author weidoudou
 * @date 2022/10/28 7:56
 **/
public class LikedList<E> {

    /**
     * 1  内部类node
     * @author weidoudou
     * @date 2022/10/28 7:59
     * @return null
     **/
    private class Node{
        //Node 只有两个属性,下一个节点和本节点存储的元素
        private Node next;
        private E e;

        /**
         * 通用调用node方法
         * @author weidoudou
         * @date 2022/10/28 8:17
         * @param e 请添加参数描述
         * @param  nodeNew 请添加参数描述
         * @return null
         **/
        public Node(E e,Node nodeNew){
            this.e = e;
            this.next = nodeNew.next;
        }

        /**
         * node 无参构造
         * @author weidoudou
         * @date 2022/10/28 8:15
         * @return null
         **/
        public Node(){
            this(null,null);
        }

        /**
         * node 有参构造
         * @author weidoudou
         * @date 2022/10/28 8:16
         * @param e 请添加参数描述
         * @return null
         **/
        public Node(E e){
           this(e,null);
        }


        @Override
        public String toString() {
            final StringBuffer sb = new StringBuffer("Node{");
            sb.append("next=").append(next);
            sb.append(", e=").append(e);
            sb.append('}');
            return sb.toString();
        }
    }

    //2 LinkedList 属性 链表头元素(火车头),大小
    private int size;
    private Node head;

    /**
     * 3    LikedList 无参
     * @author weidoudou
     * @date 2022/10/28 8:27
     * @return null
     **/
    public LikedList() {
        this.head = null;
        this.size = 0;
    }

    /**
     * 4  getSize
     * @author weidoudou
     * @date 2022/10/28 8:23
     * @return null
     **/
    public int getSize(){
        return size;
    }

    /**
     * 5  isEmpyt
     * @author weidoudou
     * @date 2022/10/28 8:24
     * @return boolean
     **/
    public boolean isEmpty(){
        return size == 0;
    }

    /**
     * 6  链表头部添加元素
     * @author weidoudou
     * @date 2022/10/28 8:37
     * @param e 请添加参数描述
     * @return void
     **/
    public void addFirst(E e){
        /*Node nodeNew = new Node(e);
        nodeNew.next = head;    //火车尾指向 上个尾巴
        this.head = nodeNew;    //火车尾 变成了当前的node*/

        //称之为优雅写法
        this.head = new Node(e,head);
        size++;
    }

    /**
     * 7  链表添加元素(链表通常不在中间添加元素,编写此段代码完全是为了后续便于理解和二叉树相关知识做铺垫)
     * @author weidoudou
     * @date 2022/10/28 8:45
     * @param index 请添加参数描述
     * @param  e 请添加参数描述
     * @return void
     **/
    public void addElement(int index,E e){
        if(index<0||index>size){
            throw new IllegalArgumentException("索引不正确");
        }

        if(index==0){
            addFirst(e);
        }else{
            Node pre = head;
            for(int i = 0;i<index-1;i++){
                pre = pre.next;
            }

            /*Node nodeNew = new Node(e);
            nodeNew.next = pre.next;
            pre.next = nodeNew;*/

            //优雅写法
            pre.next = new Node(e,pre.next);
            size++;
        }
    }


    /**
     * 8  链表尾部添加元素 认真分析下
     * @author weidoudou
     * @date 2022/10/28 18:11
     * @param e 请添加参数描述
     * @return void
     **/
    public void addLast(E e){
        addElement(size,e);
    }


}

 

原文地址:http://www.cnblogs.com/1446358788-qq/p/16837113.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性