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;
}
}
}