简易的linklist

package com.rr.java.e2_List;

/**
 * Created by isaac_gu on 2016/4/20.
 */
public class MyLinkedList {
    private Node first;
    private Node last;

    private int size;

    /**
     * 所有的值都是放到节点里面
     *
     * @param obj
     */
    public void add(Object obj) {
        Node n = new Node();
        if (first == null) {
            //第一个节点,pre与next都是null
            n.setData(obj);

            //记录first与last
            first = n;
            last = n;
        } else {
            //直接往last节点后增加新的节点
            n.setData(obj);
            //pre就是之前的last
            n.setPrevious(last);
            //next 还是null
            n.setNext(null);

            //给last记录Next的位置
            last.setNext(n);

            //当前的对象为last
            last = n;
        }
        size++;
    }

    /**
     * list的长度
     *
     * @return
     */
    public int size() {
        return size;
    }

    /**
     * 获得索引位置的值
     *
     * @param index
     * @return
     */
    public Object get(int index) {
        checkElementIndex(index);
        Node node = node(index);
        return node.getData();
    }

    private Node node(int index) {
        Node node = null;
        if (first != null) {
            node = first;
            for (int i = 0; i < index; i++) {
                node = node.getNext();
            }
        }
        return node;
    }

    private void checkElementIndex(int index) {
        if (!isElementIndex(index))
            throw new IndexOutOfBoundsException();
    }

    private boolean isElementIndex(int index) {
        return index >= 0 && index < size;
    }

    /**
     * 删除一个节点
     *
     * @param index
     * @return
     */
    public boolean remove(int index) {
        //获得目标节点
        Node node = node(index);
        if (node != null) {
            //获得目标节点的上一个以及下一个节点
            Node pre = node.getPrevious();
            Node next = node.getNext();

            //交换值
            pre.setNext(next);
            next.setPrevious(pre);

            //数组减小
            size--;
            return true;
        }

        return false;
    }

}

class Node {
    private Node previous;    //前一个节点
    private Node next;        //下一个节点
    private Object data;          //当前节点

    public Node getPrevious() {
        return previous;
    }

    public void setPrevious(Node previous) {
        this.previous = previous;
    }

    public Node getNext() {
        return next;
    }

    public void setNext(Node next) {
        this.next = next;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}


你可能感兴趣的:(简易的linklist)