简易的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;
    }
}


转载于:https://my.oschina.net/u/659286/blog/662995

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值