数据结构之双向列表实现

来源:互联网 发布:党章党规网络测试答案 编辑:程序博客网 时间:2024/05/22 10:41

双向列表,这里无论删除还是增加都需要特别注意头节点与尾节点。

package shujujiegou;/** * Created by lcc on 2017/6/30. */public class BidirectionalList {    public static void main(String[] args) {        BidirectionalList list = new BidirectionalList();        list.add("shaungqi");        list.add("dadada");        list.add("dadada1111");        list.add(2, "xxx123");        list.removeLast();        System.out.println(list.getSize() + " " + list.get(2).data);        list.add(1, "xxx123");        System.out.println(list.getSize() + " " + list.get(2).data);        list.remove(1);        System.out.println(list.getSize() + " " + list.get(0).data);    }    Node first;    Node last;    private int size;    public Node get(int i) {        cheackBorder(i);        Node getNode = first;        for (int j = 0; j < i; j++) {            getNode = getNode.next;        }        return getNode;    }    public void add(Object object) {        Node addNode = new Node();        addNode.data = object;        if (first == null) {            addNode.pre = null;            addNode.next = null;            first = addNode;            last = addNode;        } else {            last.next = addNode;            addNode.pre = last;            addNode.next = null;            last = addNode;        }        size++;    }    public void add(int i, Object object) {        cheackBorder(i);        Node addNode = new Node();        addNode.data = object;        Node getNode = get(i);        if (i == size - 1) {            last.next = addNode;            addNode.pre = last;            addNode.next = null;            last = addNode;        } else {            Node next = getNode.next;            getNode.next = addNode;            addNode.pre = getNode;            next.pre = addNode;            addNode.next = next;        }        size++;    }    public Node removeLast() {        Node oldLast = last;        Node newLast = last.pre;        last.pre = null;        newLast.next = null;        last = newLast;        size--;        return oldLast;    }    public Node remove(int i) {        cheackBorder(i);        Node removeNode = get(i);        if (i == 0 && size == 1) {            first = null;        }        else if (i == 0 && size != 1) {            Node next =first.next;            next.pre = null;            first =next;        } else{            Node pre = removeNode.pre;            Node next = removeNode.next;            pre.next = next;            next.pre = pre;        }        size--;        return removeNode;    }    public void cheackBorder(int i) {        if (i > size - 1) {            try {                throw new Exception("越界");            } catch (Exception e) {                e.printStackTrace();            }        }    }    public int getSize() {        return size;    }    public boolean  isExmpt() {        return size ==0;    }    public class Node {        Node pre;        Object data;        Node next;        public Node() {        }        public Node(Node pre, Object data, Node next) {            this.pre = pre;            this.data = data;            this.next = next;        }    }}
原创粉丝点击