手写一个LinkList的简单方法

public class LinkListtest {
    private LinkNode first;
    private LinkNode last;
    private int size;

    public void add(Object o){
        if(first == null){
            LinkNode newnode = new LinkNode(null,o,null);
            first = newnode;
            last = (newnode);
        }else{
            LinkNode newnode = new LinkNode(last,o,null);
            last.setNext(newnode);
            last = newnode;
        }
        size++;
    }
    public int getSize(){
        return size;
    }
    public Object get(int index){                 //查询指定位置的值
        rangeCheck(index);
        if(first==null){
            return null;
        }else{
            LinkNode temp = getlocation(index);
            return temp.getContent();
        }
    }
    public void remove(int index){
        rangeCheck(index);
        if(first==null){
            throw new NullPointerException();
        }else{
            LinkNode temp = getlocation(index);
            temp.getPre().setNext(temp.getNext());      //先找到要删除节点的位置,它的上一个节点的next指向下一个结点
            temp = null;
            size--;
        }
    }
    public void updateNode(int index,Object o){             //指定位置添加元素
        rangeCheck(index);
        LinkNode oldnode = getlocation(index);   //指定位置的原节点
        LinkNode newnode = new LinkNode();       //想要插入的节点
        newnode.setNext(oldnode.getNext());
        newnode.setPre(oldnode.getPre());
        newnode.getPre().setNext(newnode);
        oldnode.getNext().setPre(newnode);
        newnode.setContent(o);
        oldnode = null;
        size++;
    }

    private LinkNode getlocation(int index) {
        LinkNode temp = first;
        for (int i = 0; i < index; i++) {
            temp = temp.getNext();
        }
        return temp;
    }
    private void rangeCheck(int index) {        //越界检查
        if (index < 0 || index >= size) {
            try {
                throw new Exception();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

//Node类

public class LinkNode {
    private LinkNode next;
    private Object content;
    private LinkNode pre;

    public LinkNode(){ }
    public LinkNode(LinkNode pre,Object content,LinkNode next){
        this.setPre(pre);
        this.setContent(content);
        this.setNext(next);
    }


    public LinkNode getNext() {
        return next;
    }

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

    public Object getContent() {
        return content;
    }

    public void setContent(Object content) {
        this.content = content;
    }

    public LinkNode getPre() {
        return pre;
    }

    public void setPre(LinkNode pre) {
        this.pre = pre;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_38620833/article/details/84726471