首页 > 其他分享 >数据结构 玩转数据结构 4-2 在链表中添加元素

数据结构 玩转数据结构 4-2 在链表中添加元素

时间:2022-10-28 18:57:05浏览次数:83  
标签:Node 10 数据结构 return 28 链表 玩转 null public

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


}

 

标签:Node,10,数据结构,return,28,链表,玩转,null,public
From: https://www.cnblogs.com/1446358788-qq/p/16837113.html

相关文章

  • Rdis 基本数据结构
    首先介绍redis底层实际存储数据的八种数据类型:一、简单的动态字符串(SDS)定义结构:structsdshdr{    intlen;  //记录buf数组使用的字节数量,也等于SDS保存字符......
  • 数据结构与算法(Python)[一看就会] 01-1 线性表-顺序表定义
    线性表的顺序表示线性表的顺序表示又称为顺序存储结构或顺序映像。顺序存储定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构。特点:逻辑上相邻的元素,物......
  • 数据结构与算法(Python)[超详细版本] 02-2 栈-栈的操作(或实现)
    ##栈结构实现栈可以用顺序表实现,也可以用链表实现。栈的操作ListitemStack()创建一个新的空栈push(item)添加一个新的元素item到栈顶pop()弹出栈顶元素peek()返回栈顶......
  • 数据结构与算法--002-稀疏数组
    稀疏数组当一个数组中的很多值默认是0,因此记录了很多没有意义的数据,因而需要稀疏数组基本介绍:当一个数组中大部分是由零,或者为同一个值的数组时,可以使用稀疏数组.稀疏......
  • C++ 实现链表(单双循环链表)
    目录单链表单循环链表双循环链表单链表template<typenameT>classLinkedList{ typedefLinkedListself;typedefTvalue_type;classNode{......
  • 数据结构的定义以及其相关概念
    数据结构的定义数据结构:存在一种或多种关系的数据类型(我们老师说的)。数据结构:设计的数据元素的集合以及数据元素之间的关系,由数据元素之间的关系构成结构。因此,可以把数据......
  • 可持久化数据结构 理论
    一、可持久化数据结构简介可持久化数据结构(Persistentdatastructure)总是可以保留每一个历史版本,并且支持操作的不可改变性(immutable)。二、可持久化分类1.部分可持久化......
  • 数据结构 线段树--权值线段树 详解
    ......
  • 数据结构_树状数组 详解
    数据结构_树状数组详解......
  • 数据结构(Array)
    数据结构划分存储结构(存储对应的数据的)逻辑结构(逻辑的体现)算法存储结构的相关的内容线性结构(有顺序)数组(顺序表)栈(先进后出)队列(先进先出)非线性结构(没......