LinkedList源码分析(二)

举报
知识浅谈 发表于 2022/10/08 10:38:12 2022/10/08
【摘要】 LinkedList源码分析(二)

在这里插入图片描述

🍁 作者:知识浅谈,CSDN博客专家,阿里云签约博主,InfoQ签约博主,华为云云享专家
📌 擅长领域:全栈工程师、爬虫、ACM算法
💒 公众号:知识浅谈

LinkedList源码分析(二)总结
🤞这次都给他拿下🤞

正菜来了⛳⛳⛳

🎈LinkedList中相关方法

🍮linkBefore(E e, Node<E> succ)

含义:这个函数对应的意思是在指定的节点succ之前插入e这个元素,从下边的函数中可以看出先欸pred赋值succ的前驱节点,然后创建一个新的节点,并指定前和后节点信息,并且如果succ原来是first节点,需要更新first指向新的e这个节点。

void linkBefore(E e, Node<E> succ) {
    // assert succ != null;
    final Node<E> pred = succ.prev;
    final Node<E> newNode = new Node<>(pred, e, succ);
    succ.prev = newNode;
    if (pred == null)
        first = newNode;
    else
        pred.next = newNode;
    size++;
    modCount++;
}

🍮E unlinkFirst(Node<E> f)

含义:取消非空第一个节点 f 的链接,把f节点删除,并把first指向f节点的下一个节点。

private E unlinkFirst(Node<E> f) {
    // assert f == first && f != null;
    final E element = f.item;
    final Node<E> next = f.next;
    f.item = null;
    f.next = null; // help GC
    first = next;
    if (next == null)
        last = null;
    else
        next.prev = null;
    size--;
    modCount++;
    return element;
}

🍮E unlinkLast(Node<E> l)

含义:取消非空的最后一个节点 l 的链接,把l节点删除,并把l前一个节点的next指向为null。

private E unlinkLast(Node<E> l) {
        // assert l == last && l != null;
        final E element = l.item;
        final Node<E> prev = l.prev;
        l.item = null;
        l.prev = null; // help GC
        last = prev;
        if (prev == null)
            first = null;
        else
            prev.next = null;
        size--;
        modCount++;
        return element;
    }

🍮E unlink(Node<E> x)

含义:取消一个非空节点的链接,即把当前节点的前一个节点指向后一个节点,并返回当前节点的值。

E unlink(Node<E> x) {
        // assert x != null;
        final E element = x.item;
        final Node<E> next = x.next;
        final Node<E> prev = x.prev;

        if (prev == null) {
            first = next;
        } else {
            prev.next = next;
            x.prev = null;
        }

        if (next == null) {
            last = prev;
        } else {
            next.prev = prev;
            x.next = null;
        }

        x.item = null;
        size--;
        modCount++;
        return element;
    }

🍮E getFirst()

含义:返回LinkedList链表中的第一个元素。

public E getFirst() {
    final Node<E> f = first;
    if (f == null)
        throw new NoSuchElementException();
    return f.item;
}

🍮E getLast()

含义:返回LinkedList链表中的最后一个元素。

 public E getLast() {
        final Node<E> l = last;
        if (l == null)
            throw new NoSuchElementException();
        return l.item;
    }

🍮E removeFirst()

含义:移除LinkedList链表中的第一个元素。

public E removeFirst() {
    final Node<E> f = first;
    if (f == null)
        throw new NoSuchElementException();
    return unlinkFirst(f);
}

上边的函数中调用了unlinkFirst(f) 这个函数就是上边我们说到的把 f 这个头节点的元素删除,first指向f.next元素。

🍮E removeLast()

含义:移除LinkedList链表中的最后一个元素。

    public E removeLast() {
        final Node<E> l = last;
        if (l == null)
            throw new NoSuchElementException();
        return unlinkLast(l);
    }

上边的函数中调用了removeLast(f) 这个函数就是上边我们说到的把 f 这个尾节点的元素删除,last指向last.prev元素。

🍮void addFirst(E e)

含义:在linkedList中的头节点处添加一个e节点。

public void addFirst(E e) {
        linkFirst(e);
    }

🍮void addLast(E e)

含义:在linkedList中的尾节点处添加一个e节点。

public void addLast(E e) {
        linkLast(e);
    }

🍚总结

以上为LinkedList的部分源码的总结,希望有所帮助。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。