【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
原创粉丝点击