LinkedList源码分析:双向循环链表实现
来源:互联网 发布:淘宝店铺域名有什么用 编辑:程序博客网 时间:2024/05/21 14:49
java以面向对象思想实现双向循环链表
public class LinkedList<E> { private transient Entry<E> header = new Entry<E>(null, null, null); private transient int size = 0; /** * 构造方法:初始化LinkedList时为header结点分配内存 * 并且使header结点的next、previous指向header结点 */ public LinkedList() { header.next = header.previous = header; } /** * LinkedList添加一个元素,默认的在链表最后一个位置添加 * @param e * @return */ public boolean add(E e) { addBefore(e, header); return true; } /** * Inserts the specified element at the beginning of this list. * * @param e the element to add */ public void addFirst(E e) { addBefore(e, header.next); } /** * Appends the specified element to the end of this list. * * <p>This method is equivalent to {@link #add}. * * @param e the element to add */ public void addLast(E e) { addBefore(e, header); } /** * 以传递header.next为例,即在第一个位置添加元素 * @param e * @param entry 即header.next,初始时header.next的地址即header的地址 * @return */ private Entry<E> addBefore(E e, Entry<E> entry) { //1、为结点分配内存,新结点的next、previous指向header结点 Entry<E> newEntry = new Entry<E>(e, entry, entry.previous); //2、newEntry.previous即header结点,使header结点的next指向newEntry newEntry.previous.next = newEntry; //3、newEntry.previous即header结点, 使header结点的previous指向newEntry newEntry.next.previous = newEntry; size++; return newEntry; } private static class Entry<E> {E element; Entry<E> next; Entry<E> previous; Entry(E element, Entry<E> next, Entry<E> previous) { this.element = element; this.next = next; this.previous = previous; } }}
note :LinkedList的对象始终存在一个数据为NULL的header结点
添加第一个元素的过程如图所示:过程1、2、3 在代码中指出。添加第二个元素在此基础上执行1、2、3过程。
初次分享,其中错误之处多多指出。
- LinkedList源码分析:双向循环链表实现
- Java LinkedList双向链表源码分析
- (8) Java源码分析 ---- LinkedList (对应数据结构中线性表中的双向循环链表,JDK1.6)
- 简单实现 linkedList 双向链表
- 利用双向链表实现LinkedList
- 双向链表(LinkedList) java实现
- LinkedList,双向链表的实现
- [数据结构]双向链表实现LinkedList
- 简单实现LinkedList(双向链表)
- LinkedList : 双向链表与实现
- java双向循环链表分析及其实现
- 双向链表(LinkedList)
- LinkedList 双向链表
- 双向循环链表实现
- Linux内核2.6.14源码分析-双向循环链表代码分析(巨详细)
- Linux内核2.6.14源码分析-双向循环链表代码分析
- Linux内核2.6.14源码分析-双向循环链表代码分析(巨详细)
- Linux内核2.6.14源码分析-双向循环链表代码分析
- Java对象初始化详解
- Linux文件系统破坏,导致系统无法启动解决办法
- Oracle 12c 新特性之 table recovery from rman backups
- LIGHTING METHODS
- 堆和栈的区别
- LinkedList源码分析:双向循环链表实现
- zoj 3568 Exchange for Cola
- README的几种用法
- 看门狗驱动1
- 透明对话框背景
- java class文件
- 电话号码
- libiconv字符集转换库使用方法
- sql server存储过程调试