自己实现的LinkedList

来源:互联网 发布:gps pf11导航仪端口 编辑:程序博客网 时间:2024/05/22 15:03
package MyLinkedList;import java.util.LinkedList;/** * Created by LENOVO on 2017/7/1. */public class MyLinkedList<Object> {    private int size;    private Node head;    private Node last;    //获得链表长度    public int size(){        return size;    }    //判断是否为空    public boolean isEmpty(){        return size()==0;    }    //链表末尾添加    public void add(Object object){        linkLast(object);        size++;    }    //通过位置判断如何添加    public void add(int index, Object obj){        if(index == size){            linkLast(obj);        }else{            linkBefore(obj, getNode(index));        }        size++;    }    //删除某节点    public void remove(int index){        unlink(getNode(index - 1));        size--;    }    //获得index位置的值    public java.lang.Object get(int index){        return getNode(index).object;    }    //设置某修改位置的值    public void set(int index, Object object){        Node node = getNode(index - 1);        node.object = object;    }    //若index等于size,则说明是从链表尾部插入    private void linkLast(Object obj){//        if(head == null){//       0 1 2 3 4//        }        Node oldNode = last;        Node newNode = new Node(obj, last, null);        last = newNode;        if(oldNode == null){            head = newNode;        }else{            oldNode.next = newNode;        }    }    //若index小与size,则说明是从链表中插入 0 1 2 3 4    private void linkBefore(Object obj,Node oldNode){        Node prevNode = oldNode.prev;        Node newNode = new Node(obj, prevNode,prevNode.next);        prevNode.next = newNode;    }    //断开指定节点的连接(删除某节点)    private void unlink(Node node){        Node prev = node.prev;        Node next = node.next;        prev.next = next;        next.prev = prev;    }    //因为是双向链表,所以判断是从头查找还是从尾查找    private Node getNode(int index){        if(index < 0 || index > size + 1){            throw new RuntimeException("越界!");        }        if(size / 2 <= index){            Node h = head;            for(int i = 0;i<index;i++){                h = h.next;            }            return h;        }else{            Node l = last;            for(int i = size - 1; i > index; i--){                l = l.prev;            }            return l;        }    }    //Node是内部类    private static class Node {        private java.lang.Object object;        private Node prev;        private Node next;        public Node() {        }        public Node(java.lang.Object obj, Node prev, Node next) {            this.object = obj;            this.prev = prev;            this.next = next;        }    }    public static void main(String[] args) {        MyLinkedList<Integer> myLinkedList = new MyLinkedList<Integer>();        for (int i = 0; i < 10; i++) {            myLinkedList.add(i);        }        for (int i = 0; i < 10; i++) {            System.out.println(myLinkedList.get(i));        }    }}
原创粉丝点击