【Java数据结构】无头结点双向循环链表

    xiaoxiao2023-10-27  155

     

    public class CircleList<E> { private class Node<T> { private T value; private Node<T> prev; private Node<T> next; public Node(T value){ this.value = value; } public Node(T value,Node<T> prev,Node<T> next){ this.value = value; this.prev = prev; this.next = next; } } private Node<E> first; private Node<E> last; private int num; public CircleList(){ first = null; last = null; } // 增 //头增 public void addFirst(E value){ Node<E> node= new Node(value); if(last == null){ first = node; last = first; } first.prev = node; last.next = node; node.next = first; node.prev = last; first = node; num++; } //尾增 public void addEnd(E value){ Node<E> node = new Node<>(value); if(first == null){ last = node; first = last; } last.next = node; first.prev = node; node.next = first; node.prev = last; last = node; num++; } //第i个增 public void addI(E value,int i){ try { int m = 1; Node<E> p = first; while (m < i-1) { p = p.next; m++; } Node<E> node = new Node<>(value, p, p.next); p.next.prev = node; p.next = node; num++; }catch (NullPointerException e){ System.out.println(e); } } // 删 public void init(){ first = null; last = null; num = 0; } //删除第i个 public void delI(int i){ if(i > num || i < 1){ throw new NullPointerException(); } if(i == 1){ last.next = first.next; first.next.prev = last; first = first.next; num--; }else if(i == num){ first.prev = last.prev; last.prev.next = first; last = last.prev; num--; }else{ Node<E> node = first; for (int q = 1; q < i; q++) { node = node.next; } node.prev.next = node.next; node.next.prev = node.prev; num--; } } // 改 public void changeI(int i,E value){ if(i > num || i <1){ throw new NullPointerException(); } Node<E> node = first; for(int q = 1;q <= i;q++){ node = node.next; } node.value = value; } // 查 //查第i个 public void findI(int i){ if(i > num || i <1){ System.out.println("超出范围"); return; } Node<E> node = first; for(int q = 1;q < i;q++){ node = node.next; } System.out.println("第"+i+"个的值是:"+node.value); } //查值value的 public void findV(E value){ int i = 1; int m = 0; Node<E> node = first; for(int p = 1;p <= num; p++){ if(node.value.equals(value)){ System.out.println(value+"在第:"+i+"个"); m++; } node = node.next; i++; } if(m == 0){ System.out.println("没找到"); } } public void show(){ Node<E> node = first; for(int i = 1;i <= num; i++){ System.out.print(node.value+","); node = node.next; } } }

     

     

    最新回复(0)