public class SingleCircleLinkedList extends AbstractList{private Nodefirst;private static class Node{
E element;
Nodenext;public Node(E element, Nodenext) {this.element =element;this.next =next;
}
@OverridepublicString toString() {
StringBuilder sb= newStringBuilder();
sb.append(element).append("_").append(next.element);returnsb.toString();
}
}
@Overridepublic voidclear() {
size= 0;
first= null;
}
@Overridepublic E get(intindex) {returnnode(index).element;
}
@Overridepublic E set(intindex, E element) {
Node node =node(index);
E old=node.element;
node.element=element;returnold;
}
@Overridepublic void add(intindex, E element) {
rangeCheckForAdd(index);if (index == 0) {
Node newFirst = new Node<>(element, first);//拿到最后一个节点
Node last = (size == 0) ? newFirst : node(size - 1);
last.next=newFirst;
first=newFirst;
}else{
Node prev = node(index - 1);
prev.next= new Node<>(element, prev.next);
}
size++;
}
@Overridepublic E remove(intindex) {
rangeCheck(index);
Node node =first;if (index == 0) {if (size == 1) {
first= null;
}else{
Node last = node(size - 1);
first=first.next;
last.next=first;
}
}else{
Node prev = node(index - 1);
node=prev.next;
prev.next=node.next;
}
size--;returnnode.element;
}
@Overridepublic intindexOf(E element) {if (element == null) {
Node node =first;for (int i = 0; i < size; i++) {if (node.element == null) returni;
node=node.next;
}
}else{
Node node =first;for (int i = 0; i < size; i++) {if (element.equals(node.element)) returni;
node=node.next;
}
}returnELEMENT_NOT_FOUND;
}/*** 获取index位置对应的节点对象
*@paramindex
*@return
*/
private Node node(intindex) {
rangeCheck(index);
Node node =first;for (int i = 0; i < index; i++) {
node=node.next;
}returnnode;
}
@OverridepublicString toString() {
StringBuilder string= newStringBuilder();
string.append("size=").append(size).append(", [");
Node node =first;for (int i = 0; i < size; i++) {if (i != 0) {
string.append(", ");
}
string.append(node);
node=node.next;
}
string.append("]");returnstring.toString();
}
}