【java】双向链表实现

来源:互联网 发布:标致pp2000软件 编辑:程序博客网 时间:2024/05/21 09:58
public interface mylist<E> {public void add(E e);public void add(int index,E e);public void clear();public boolean contains(E e);public E get(int index);public int indexOf(E e);public boolean isEmpty();public int lastIndexOf(E e);public boolean remove(E e);public E remove(int index);public Object set(int index,E e);public int size();}
public abstract class myabstractlist<E> implements mylist<E>{protected int size = 0;protected myabstractlist(){}protected myabstractlist(E[] objects){for(int i = 0;i<objects.length;i++)add(objects[i]);}    public void add(E e){    add(size,e);    }    public boolean isEmpty(){    return size == 0;    }    public int size(){    return size;    }    public boolean remove(E e){    if(indexOf(e)>=0){    remove(indexOf(e));    return true;    }    else {return false;}    }}

public class mylinkedlist<E> extends myabstractlist<E>{private static class Node<E>{E element;Node<E> next;Node<E> previous;public Node(E e){element = e;}}private Node<E> head;private Node<E> tail;public mylinkedlist(){head = null;tail = null;}public mylinkedlist(E[] objects){super(objects);}public E getfirst(){if(size==0)return null;else{return head.element;}}public E getlast(){if(size==0)return null;else{return tail.element;}}public void addFirst(E e){Node<E> newNode = new Node<E>(e);if(head!=null)   head.previous = newNode;newNode.next = head;head = newNode;size++;if(tail==null)tail = head;}public void addLast(E e){Node<E> newNode = new Node<E>(e);if(tail==null){head = tail = newNode;}else{tail.next = newNode;(tail.next).previous = tail;tail = tail.next;}size++;}public void add(int index,E e){if(index==0)addFirst(e);else if(index>=size)addLast(e);else{Node<E> current = getnode(index-1);Node<E> behind = getnode(index);Node<E> n = new Node<E>(e);n.previous = current;n.next = behind;current.next = n;behind.previous = n;size++;}}public E removeFirst(){if(size==0)return null;else{Node<E> temp = head;if(size==1)head = tail = null;else{    head = head.next;    head.previous = null;}size--;    return temp.element;}}public E removeLast(){if(size==0)return null;else if(size==1){Node<E> temp = head;head = tail = null;size = 0;return temp.element;}else{Node<E> temp = tail;tail = tail.previous;tail.next = null;size--;return temp.element;}}public E remove(int index){if(index<0||index>=size)return null;else if(index==0)return removeFirst();else if(index==size-1)return removeLast();else{Node<E> temp = getnode(index);Node<E> front = getnode(index-1);Node<E> current = getnode(index+1);front.next = current;current.previous = front;size--;return temp.element;}}public String toString(){StringBuilder result = new StringBuilder("[");for(int i = 0;i<size;i++){result.append(get(i));if((getnode(i).next)!=null)result.append(",");else {result.append("]");}}return result.toString();}public void clear(){head = tail = null;}public boolean contains(E e){if(indexOf(e)!=-1)return true;else {return false;}}public E get(int index){if(size==0)return null;return (getnode(index)).element;}public Node<E> getnode(int index){if(size==0)return null;else{Node<E> current = head;if(index!=0){for(int i = 0;i<index;i++)current = current.next;}return current;}}public int indexOf(E e){int i = 0;Node<E> temp = new Node<E>(e);if(size!=0){for(i = 0;i<size;i++){if(temp.element==get(i))return i;    }}return -1;}public int lastIndexOf(E e){int max = -1;Node<E> temp = new Node<E>(e);if(size!=0){for(int i = 0;i<size;i++){if(temp.element==get(i))max = i;   }}return max;}public E set(int index,E e){if(size==0)return null;Node<E> current = head;if(index==0)head.element = e;else(getnode(index)).element = e;return e;}}

public class test {public static void main(String[] args){mylinkedlist<String> list = new mylinkedlist<String>();list.add("America");list.add(0,"Canada");list.add("Russia");System.out.println("(1) "+list);System.out.println(list.indexOf("Canada"));System.out.println(list.indexOf("Russia"));list.addLast("France");list.add(2,"Germany");list.add("China");System.out.println("(2) "+list);System.out.println(list.get(3));System.out.println(list.indexOf("France"));list.add("Russia");System.out.println(list.lastIndexOf("Russia"));list.add("Norway");list.add("Poland");list.addLast("England");list.set(3,"Japan");System.out.println("(3) "+list);list.removeLast();System.out.println(list.contains("Poland"));list.remove(3);System.out.println("(4) "+list);list.remove(0);System.out.println("(5) "+list);list.remove(list.size()-1);System.out.println("(6) "+list);}}


0 0
原创粉丝点击