双链表实现

来源:互联网 发布:ios软件开发入门 编辑:程序博客网 时间:2024/06/05 01:18
public class DoubleLinkList<Item> {private DoubleNode head;private int N;private class DoubleNode{Item item;DoubleNode pre;DoubleNode next;public DoubleNode() {}public DoubleNode(Item item,DoubleNode pre,DoubleNode next){this.item = item;this.pre = pre;this.next = next;}}public DoubleLinkList() {this.head = new DoubleNode();//建头结点}public DoubleLinkList(Item[] a){this();DoubleNode p = this.head;for(int i=0; i<a.length; i++){DoubleNode q = new DoubleNode(a[i],p,p.next);//尾插if(p.next != null)p.next.pre = q;p.next = q;N++;}}public void insert(int i,Item x){if(i<1 || i>N)return;else{DoubleNode p = this.head;p = p.next;DoubleNode q = new DoubleNode(x,p.pre,p);//头插p.pre.next = q;p.pre = q;N++;}}public void insertFirst(Item item){DoubleNode p = this.head;DoubleNode q = new DoubleNode(item,p,p.next);p.next.pre = q;p.next = q;N++;}public Item removeFirst(){DoubleNode p = this.head;Item item = p.next.item;p.next.pre = p;p.next = p.next.next;N--;return item;}public void insertLast(Item item){DoubleNode p = this.head;int j=1;while(j<N){p = p.next;j++;}DoubleNode q = new DoubleNode(item,p,p.next);p.next.pre = q;p.next = q;N++;}public Item removeLast(){DoubleNode p = this.head;int j=1;while(j<N){p = p.next;j++;}Item item = p.next.item;p.next = null;N--;return item;}public Item remove(int i){if(i<1 || i>N)return null;else{DoubleNode p = this.head;for(int j=1; j<=i; j++)p = p.next;Item item = p.item;p.pre.next = p.next;if(p.next != null)p.next.pre = p.pre;N--;return item;}}public void display(){DoubleNode p = this.head.next;System.out.println("表中数据为:");while(p!=null){System.out.print(p.item+" ");p = p.next;}System.out.println();}public static void main(String[] args) {String[] s = {"A","B","C","D","E"};DoubleLinkList<String> dll = new DoubleLinkList<String>(s);dll.display();//dll.insert(1, "X");//dll.display();//dll.remove(1);//dll.remove(3);//dll.display();//dll.insertFirst("X");//dll.display();//System.out.println(dll.removeFirst());//dll.display();//dll.insertLast("X");//dll.display();System.out.println(dll.removeLast());dll.display();}}