[Leetcode学习]LinkedList链表以及Java中设计

一、介绍

本人熟悉的语言是java,所以使用的算法代码都会是java代码。

链表是一个Object一个Object,通过他们之间reference,连接起来的数据结构,就像鸭子排队一样,一个跟着一个走。

形成链表数据结构,就需要用代码定义一个Object,还有Object包含一个reference。

Class Node<T> {              // 作为链表的Object 
    private T val;           // 节点的值
    private Node<T> next;    // 作为下一个节点的联系reference
    Node<T>(T val, Node<T> next){
        this.val = val;
        this.next = next;
    }
}

上面定义的是一个单向的链表,就是只有next reference联系下一个节点,如果双向链表就在Node中加一个成员变量private Node<T> pre; 作为previous reference联系前一个节点;

链表作为一种数据结构,会涉及的内存操作就是增删查改,如果要设计LinkedList,可以先阅读java源码中的java.util.LinkedList一些代码。


二、Java-1.8中的LinkedList

(1)成员变量

Java中的LinkedList成员变量是屈指可数的

transient int size = 0;   // 记录LinkedList的长度
transient Node<E> first;  // LinkedList第一个节点
transient Node<E> last;   // LinkedList最后一个节点

// 是属于父类AbstraceList的成员变量,是给迭代器以及Java8新特性Spliterator用的
protected transient int modCount = 0;

使用的Node为

private static class Node<E> {
    E item;              // 值
    Node<E> next;        // 后一个节点
    Node<E> prev;        // 前一个节点

    Node(Node<E> prev, E element, Node<E> next) {
        this.item = element;
        this.next = next;
        this.prev = prev;
    }
}

很明显,Java8的链表是一个双向链表数据结构,双向链表会有一个链表环的问题,如果有链表环(cycle),用迭代器或者遍历双向链表会一直在环(cycle)那里循环遍历,解决方法之后可以有。
(2)增加(add)

A、链表前增加,链表后增加

public void addFirst(E e) {
    linkFirst(e);
}
public void addLast(E e) {
    linkLast(e);
}
private void linkFirst(E e) {
    final Node<E> f = first;                        // 暂存第一个元素f
    final Node<E> newNode = new Node<>(null, e, f); // 根据值new Node
    first = newNode;         
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值