LinkedList

亡梦爱人 提交于 2019-11-29 03:36:16
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;
        }
    }


    public static void main(String[] args) {
        LinkedList ll = new LinkedList();
        ll.add(1);
        ll.add(2);
        ll.add(3);
        ll.add(4);
        ll.add(5);
        ll.add(2, 88);

        ll.list();
        System.out.println("位置: " + ll.get(3));
        System.out.println("被删除的元素: " + ll.remove(2));
        ll.list();
        ll.clear();
        ll.list();
    }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!