LinkedList源码分析(二)

## LinkedList源码分析()
 /**
     * 检查下标是否正常
     *
     * @param index
     */
    private void checkIndex(int index) {
        if (index < 0 || index >= size) {
            throw new IndexOutOfBoundsException("下标异常" + index);
        }
    }

    /**
     * 检查下标是否合法 用于添加元素
     *
     * @param index
     */
    private void checkIndexAdd(int index) {
        if (index < 0 || index > size) {
            throw new IndexOutOfBoundsException("下标异常" + index);
        }
    }

    /**
     * 检查截取新集合下标是否正常
     *
     * @param start 开始下标
     * @param end   终止下标
     */
    private void checkSubIndex(int start, int end) {
        if (start >= end) {
            throw new IndexOutOfBoundsException("下标异常,正确下标 start < end");
        }
        checkIndex(start);
        checkIndex(end);
    }

    /**
     * 取消链表中某一元素的prev next引用  将指定元素t出链表结构中 将该元素的前后连接元素连接到一起
     *
     * @param x 要取消的元素
     * @return 返回被取消的元素
     */
    E unlink(Node<E> x) {
        final E element = x.item;//用来保存要取消连接的数据
        final Node<E> next = x.next;
        final Node<E> prev = x.prev;
        //判断prev是否为空来确定是否是第一个元素
        if (prev == null) {
            first = next;
        } else {
            prev.next = next;//被取消元素前一个元素的next引用重新指向
            x.prev = null;//清除被取消元素的prev引用
        }
        //判断next是否为空来确定是否是最后一个元素
        if (next == null) {
            last = prev;
        } else {
            next.prev = prev;//被取消元素的后一个元素的prev引用重新指向
            x.next = null; // 清空被取消元素的next引用
        }
        x.item = null;//清空数据
        size--;
        return element;
    }

    /**
     * 获取指定下标元素
     *
     * @param index 指定下标
     * @return Node<E>元素
     */
    Node<E> node(int index) {
        if (index < size / 2) {
            //当下标小于1/2size时,从first遍历
            Node<E> temp = first;
            for (int i = 0; i < index; i++) {
                temp = temp.next;
            }
            return temp;
        } else {
            //当下标大于1/2size时,从last遍历
            Node<E> temp = last;
            for (int i = size - 1; i > index; i++) {
                temp = temp.prev;
            }
            return temp;
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值