zoukankan      html  css  js  c++  java
  • LinkedList add remove get 代码分析

    add

      void linkLast(E e) { //e 要添加的元素
            final Node<E> l = last; // 最后一个元素
            final Node<E> newNode = new Node<>(l, e, null); //创建元素新节点
            last = newNode;
            if (l == null)// 如果最后一个节点null,说明是第一次add 元素
                first = newNode;  //将新的元素置第一个元素
            else
                l.next = newNode; // 如果最后一个节点不为null,就把新节点挂载最后一个节点的下面
            size++; //集合中真实的元素个数
            modCount++;// 操作数++
        }

    remove

    public E remove(int index) {
            checkElementIndex(index);
            return unlink(node(index));
        }
    
    // ===============================获取要删除的节点    
    Node<E> node(int index) {// index=2
            // assert isElementIndex(index);
    
            if (index < (size >> 1)) {
                Node<E> x = first;
    //遍历index 找到要删除的node
                for (int i = 0; i < index; i++)
                    x = x.next;
                return x;
            } else {
                Node<E> x = last;
                for (int i = size - 1; i > index; i--)
                    x = x.prev;
                return x;
            }
        }
    // =================================删除元素
    E unlink(Node<E> x) {// x 要删除的节点
            // assert x != null;
            final E element = x.item;  // 获取要删除node的item
            final Node<E> next = x.next//获取要删除node.next
            final Node<E> prev = x.prev;////获取要删除node.prev
    
    // 处理delNode 的prev 节点
            if (prev == null) { // 如果没有上一个元素,就说明delNode是头节点,将delNode的next 节点置为first
                first = next;
            } else {
                prev.next = next; // 如果delNode有上一个节点,就将上一个节点的next 置为delNode的next。简单说就是delNode.next 替换 delNode的位置
                x.prev = null; // 将delNode 的prev 置为null
            }
    
    // 处理delNode 的next节点
            if (next == null) {// 说明delNode 是最后一个node
                last = prev; // 那么delNode 的prev 就是最后一个node
            } else {
                next.prev = prev; // 将prev 节点 关联到next.prev节点
                x.next = null; // 将delNode 的next置为null
            }
    
            x.item = null;// 将delNode 的item置为null
            size--; // 数组容量--
            modCount++; // 操作数据++
            return element; // 返回删除的node
        }
  • 相关阅读:
    ios NSString format 保留小数点 float double
    IOS中延时执行的几种方式的比较和汇总
    ioss使用xcode常用快捷键
    iphone 6plus 下app里的状态栏和界面会被放大的问题//以及设置APP闪屏页/APP图标流程
    iostbleView刷新后显示指定cell
    iOS-打包成ipa的4种方法
    iosttableViewCell右侧的箭头,圆形等
    Linux学习之CentOS(二十)------vi/vim 按键说明
    gzip
    bzip2
  • 原文地址:https://www.cnblogs.com/zhangXingSheng/p/10810169.html
Copyright © 2011-2022 走看看