package Myjava;
public class CircularLinkedList {
private class Node{
String data;
Node next;
public Node(){}
public Node(String data,Node next){
this.data=data;
this.next=next;
}
}
private Node header;
private int size;
public CircularLinkedList(){
header=null;
}
public CircularLinkedList(String data){
header=new Node(data,null);
header.next=header;
size++;
}
public void addAtTail(String data){//尾插
Node node=new Node(data,null);
if(header.next==header){
header.next=node;
node.next=header;
}else{
Node current=header;
while(current.next!=header){
current=current.next;
}
current.next=node;
node.next=header;
}
size++;
}
public String getData(int index){
return getNodeByIndex(index).data;
}
private Node getNodeByIndex(int index) {
if(index<0||index>size-1){
throw new IndexOutOfBoundsException("OutOfIndex");
}
Node current=header;
for(int i=0;i<size&¤t!=null;i++,current=current.next){
if(index==i){
return current;
}
}
return null;
}
public String delNodeByIndex(int index){//删除指定索引处的节点
if(index<0||index>size-1){
throw new IndexOutOfBoundsException("OutOfIndex");
}
Node delNode=null;
if(index==0){
delNode=header;
header=header.next;
}else {
Node prve=getNodeByIndex(index-1);
delNode=prve.next;
prve.next=delNode.next;
delNode.next=null;
}size--;
return delNode.data;
}
public String toString(){
StringBuffer sb=new StringBuffer(header.data);
Node current=header;
while(current.next!=header){
sb.append(","+current.next.data.toString());
current=current.next;
}
return sb.toString();
}
public static void main(String[] args) {
CircularLinkedList c=new CircularLinkedList("0");
c.addAtTail("A");
c.addAtTail("B");
c.addAtTail("C");
System.out.println(c.getData(3));
System.out.println(c.toString());
System.out.println(c.size);
System.out.println(c.delNodeByIndex(1));
System.out.println(c.toString());
System.out.println(c.size);
}
}