LinkedList

public class LinkedList<E> extends AbstractList<E> {

    private Node<E> head;
    private int size;

    class Node<E> {
        private Node<E> next;
        private E e;

        Node(Node node, E e) {
            next = node;
            this.e = e;
        }

        Node(E e) {
            this.e = e;
        }
    }


    public int size() {
        return size;
    }

    /**
     * 添加元素
     * @param e
     * @return
     */
    @Override
    public boolean add(E e) {
        //初始化要加入的节点
        Node node = new Node<E>(e);
        if (head == null) {
            head = node;
            return false;
        }
        Node temp = head;
        while (temp.next != null) {

            temp = temp.next;
        }
        temp.next = node;
        size++;


        return true;
    }

    /**
     * 添加指定位置元素
     * @param index 索引
     * @param e 元素
     */
    public void add(int index, E e) {
        check(index);
        Node node = new Node<E>(e);
        Node<E> temp = head;
        int counter = 0;
        while (temp.next != null) {
            counter++;
            if (counter == index) {
                node.next = temp.next;
                temp.next = node;
                return;
            }
            temp = temp.next;
        }
        size++;
    }

    /**
     * 位置检查
     * @param index
     */
    public void check(int index) {
        if (index < 0 || index > size) {
            throw new IndexOutOfBoundsException("位置不合法");
        }
    }

    /**
     * 获取指定位置元素
     * @param index
     * @return
     */
    public E get(int index) {
        Node node = head;
        for (int i = 0; i <= index; i++) {
            node = node.next;
            if (i == index) {
                return (E) node.e;
            }
        }
        return null;
    }

    /**
     * 删除指定位置元素
     * @param index
     * @return
     */
    @Override
    public E remove(int index) {
        check(index);

        Node<E> temp = head;
        int counter = 0;
        Node node;
        while (temp.next != null) {
            counter++;
            if (counter == index) {
                node = temp.next;
                temp.next = temp.next.next;
                return (E) node.e;
            }
            temp = temp.next;
        }
        size--;
        return null;
    }

    /**
     * 清空元素
     */
    @Override
    public void clear() {
        size = 0;
        head = null;
    }

    public void list() {
        Node tmp = head;
        while (tmp != null) {
            System.out.print(tmp.e+" ");
            tmp = tmp.next;
        }
    }



posted @ 2019-09-02 01:24  webzom  阅读(103)  评论(0)    收藏  举报