【Java】之 简易LinkedList
来源:互联网 发布:红外门禁单片机 编辑:程序博客网 时间:2024/06/03 21:32
package dataStructure;/** * Created by donal on 2017/2/14. */import java.util.LinkedList;import java.util.NoSuchElementException;/** * 1. LinkedList实现了基本的List接口 * * 方法: * 1. getFirst() 和 element() 返回列表的头,并不移除他 * 若为空,则抛出NoSuchElement. * 2. removeFirst() 与 remove() 移除并返回列表的头 * 若为空,则抛出NoSuchElement. * poll()稍有差异,若列表为空则放回null * 3. addFirst() 与 add() 和 addLast() 相同,它们都将某个元素 * 插入到列表的尾(端)部 * 4. removeLast()移除并返回列表的最后一个元素 * */public class MyLinkedList<T> { int size; Node<T> first; Node<T> last; public MyLinkedList(){ } 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; } } private void linkFirst(T t){ final Node<T> f = first; final Node<T> newNode = new Node<>(null, t, f); first = newNode; if (f == null) last = newNode; else f.prev = newNode; size++; } private void linkLast(T t){ final Node<T> l = last; final Node<T> newNode = new Node<T>(l, t, null); last = newNode; if (l == null) first = newNode; else l.next = newNode; size++; } public void addFirst(T t){ linkFirst(t); } public boolean add(T t){ linkLast(t); return true; } public void addLast(T t){ linkLast(t); } public T getFirst(){ final Node<T> f = first; if (f == null) throw new NoSuchElementException(); return f.item; } public T element(){ return getFirst(); } private T unLinkFirst(Node<T> f){ final T element = f.item; final Node<T> next = f.next; f.prev = null; f.next = null; f.item = null; first = next; if (next == null) last = null; else next.prev = null; size--; return element; } private T unLinkLast(Node<T> l){ final T element = l.item; final Node<T> prev = l.prev; l.item = null; l.next = null; l.prev = null; last = prev; if (prev == null) first = null; else prev.next = null; size--; return element; } public T remove(){ return removeFirst(); } public T removeFirst(){ return unLinkFirst(first); } public T removeLast(){ return unLinkLast(last); } public String toString(){ StringBuilder sb = new StringBuilder(); sb.append("[ "); for (Node<T> i = first; i != null; i = i.next) sb.append(i.item + " "); sb.append("]"); return sb.toString(); } public static void main(String[] args) { MyLinkedList<String> myLinkedList = new MyLinkedList<>(); for (String s : "GEGE da jiji da a da jiji!".split(" ")) myLinkedList.add(s); System.out.println(myLinkedList); System.out.println("getFirst(): " + myLinkedList.getFirst()); System.out.println("remove(): " + myLinkedList.remove() ); System.out.println(myLinkedList); System.out.println("removeFirst(): " + myLinkedList.removeFirst()); System.out.println(myLinkedList); System.out.println("removeLast(): " + myLinkedList.removeLast()); System.out.println(myLinkedList); }}
1 0
- 【Java】之 简易LinkedList
- 【java集合】自己实现简易的LinkedList
- Java源码之LinkedList
- Java之LinkedList
- Java之LinkedList详解
- Java集合之LinkedList
- java集合之LinkedList
- Java源码之LinkedList
- Java基础之LinkedList
- Java集合之LinkedList
- Java之--ArrayList、LinkedList
- Java学习之LinkedList
- JAVA学习之LinkedList
- Java集合之LinkedList
- java集合之LinkedList
- java集合之LinkedList
- java集合之LinkedList
- java源码分析之LinkedList
- 火狐的浏览器进行post,GET接口测试
- JS 继承
- 解决struts2+spring2.5+ibatis2,Property 'sqlMapClient' is required
- js定义class的三种方法
- 算法知识点整理——第4章 贪心算法(未完)
- 【Java】之 简易LinkedList
- 23种设计模式
- 集合工具类
- AES-CBC-PKCS5Padding加密算法Java实现
- POJ 3661 Runing 笔记
- 【翻译】理解Joomla!模板
- 手机app测试方法(二)App测试-常见测试点
- mysql 使用
- studio设置五彩缤纷的log