JAVA实现双向链表

来源:互联网 发布:软文标题 知乎 编辑:程序博客网 时间:2024/06/05 08:50


class DoubleLinkedList {public class Node {Object value;Node prev = this;Node next = this;public Node(Object v) {value = v;}public String toSting() {return value.toString();}}private Node head = new Node(null);// 头节点private int size; // 链大小private Node getNode(int index) {if (index < 0 || index >= size) {throw new IndexOutOfBoundsException();}Node node = head.next;for (int i = 0; i < index; i++) {node = node.next;}return node;}private void addBefore(Node newNode, Node node) {newNode.prev = node.prev;newNode.next = node;newNode.next.prev = newNode;newNode.prev.next = newNode;size++;}private void addAfter(Node newNode, Node node) {newNode.prev = node;newNode.next = node.next;newNode.next.prev = newNode;newNode.prev.next = newNode;size++;}private void removeNode(Node node) {node.prev.next = node.next;node.next.prev = node.prev;node.prev = null;node.next = null;size--;}public boolean addFirst(Object o) {addAfter(new Node(o), head);return true;}public boolean addLast(Object o) {addBefore(new Node(o), head);return true;}public boolean add(int index, Object o) {addBefore(new Node(o), getNode(index));return true;}public Object get(int index) {return getNode(index).value;}public boolean remove(int index) {removeNode(getNode(index));return true;}public boolean removeFirst() {removeNode(head.next);return true;}public boolean removeLast() {removeNode(head.prev);return true;}public String toString() {StringBuffer s = new StringBuffer();Node node = head;for (int i = 0; i < size; i++) {node = node.next;s.append(",").append(node.value);}s.append("]");return "[" + s.substring(1);}}

public class TestDoubleLinkedList {public static void main(String[] args) {DoubleLinkedList dll = new DoubleLinkedList();// 添加dll.addLast("1");dll.addLast("2");dll.addLast("3");dll.addLast("4");System.out.println(dll);dll.addFirst("5");System.out.println(dll);dll.addLast("6");System.out.println(dll);//移除    dll.removeFirst();    System.out.println(dll);    dll.removeLast();    System.out.println(dll);    dll.remove(2);    System.out.println(dll);    System.out.println(dll.get(1));}}


0 0
原创粉丝点击