自定义链表集合,无实现任何接口,继承

来源:互联网 发布:高新区网络问政平台 编辑:程序博客网 时间:2024/06/04 19:44

用Java实现了一个链表集合,虽然已经有LinkedList,试着写一个,也算是了解下底层结构吧~
我不会告诉你我是因为忘记C语言才这么写的。

package other;public class MyLinkedList<E> {    final public int MAX_SIZE = Integer.MAX_VALUE - 2;    /**     * 头结点     */    private ListNode head;    /**     * 尾节点     */    private ListNode end;    /**     * 节点数     */    private int size;    public MyLinkedList(){        head = new ListNode();        head.next = null;        size = 0;        end = head;    }    public void add(E value) {        ListNode node = new ListNode();        node.value = value;        node.next = null;        end.next = node;        node.last = end;        end = node;        size++;    }    public E remove(E element) {                ListNode now = head.next;        ListNode next = now.next;        while(now != null) {            if(now.isSame(element)) {                now.next = next;                next.last = now;                return now.value;            }            now = now.next;            next = now.next;        }        return null;    }    public E remove(int index) {        rangeCheck(index);        ListNode now ;        ListNode next;        int n;        //是否降序查找        boolean desc;        if(index>size%2) {            now = end;            next = now.last;            desc = false;            n = 0;        }else {            now = head.next;            next = now.next;            desc = true;            n = size-1;        }        while(now != null) {            if(n == index) {                now.next = next;                next.last = now;                return now.value;            }            if(!desc) {                now = now.next;                next = now.next;                n++;            } else {                now = now.last;                next = now.last;                n--;            }        }        return null;    }    public int indexof(E element) {        ListNode now = head.next;        int n = -1;        while(now != null) {            if(now.isSame(element))                return n;            now = now.next;            n++;        }        return -1;    }    public int lastIndexof(E element) {        ListNode now = end;        int n = size-1;        while(now != null) {            if(now.isSame(element))                return n;            now = now.last;            n--;        }        return -1;    }    public void set(int index,E element) {        rangeCheck(index);        ListNode now;        int n;        //是否降序查找        boolean desc;        if(index>size%2) {            now = end;            desc = false;            n = 0;        }else {            now = head.next;            desc = true;            n = size-1;        }        while(now != null) {            if(n == index) {                now.value = element;            }            now = now.next;            if(!desc)                 n++;            else                 n--;        }    }    public E get(int index) {        rangeCheck(index);        ListNode now;        int n;        //是否降序查找        boolean desc;        if(index>size%2) {            now = end;            desc = false;            n = 0;        }else {            now = head.next;            desc = true;            n = size-1;        }        while(now != null) {            if(n == index) {                return now.value;            }            now = now.next;            if(!desc)                 n++;            else                 n--;        }        return null;    }    public int size() {        return size;    }    public boolean isEmpty() {        return size==0?true:false;    }    private void rangeCheck(int index) {        if (index >= size)            throw new IndexOutOfBoundsException(outOfBoundsMsg(index));    }    private String outOfBoundsMsg(int index) {        return "Index: "+index+", Size: "+size;    }    //节点    private class ListNode{        //值        private E value;        //上一节点        private ListNode last;        //下一个节点        private ListNode next;        private boolean isSame(E element) {            if(element == null)                return false;            if(element.getClass() != getclass())                return false;            E e = (E)element;            if(e.equals(value))                return true;            return false;        }        private Class<? extends Object> getclass() {            return value.getClass();        }    }}
原创粉丝点击