package cn.shine.view;
public class Element {
private Object data;
private Element nextNode;
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public Element getNextNode() {
return nextNode;
}
public void setNextNode(Element nextNode) {
this.nextNode = nextNode;
}
public Element(Object data, Element nextNode) {
super();
this.data = data;
this.nextNode = nextNode;
}
}
package cn.shine.view;
public interface List {
void add(Object o);
int size();
boolean remove(Object o);
Element getElement(int index);
Object getObject (int index);
boolean contains(Object o);
boolean isEmpty();
void clear();
boolean checkLoop();
}
package cn.shine.view;
import java.util.HashSet;
import java.util.Set;
public class LinkList implements List{
Element head = null;
Element tail = null;
public void add(Object o) {
Element element = new Element(o,null);
if(head == null) {
head = element;
tail = element;
}
tail.setNextNode(element);
tail = element;
}
public int size() {
if(head == null) return 0;
Element element = head.getNextNode();
int size =0;
while (element != null) {
size ++;
element = element.getNextNode();
}
return size;
}
public boolean remove(Object o) {
if(head == null) return false;
Element nextEle = head.getNextNode();
while (nextEle != null) {
if(nextEle.getData() == o) {
nextEle = nextEle.getNextNode();
return true;
}
head = nextEle;
nextEle = nextEle.getNextNode();
}
return false;
}
public Element getElement(int index) {
if(head != null) {
int size = this.size();
if(index < size-1 && index>0) {
Element element = head.getNextNode();
int i = 0;
while(element != null) {
if(index == i) {
return element;
}
i++;
element = element.getNextNode();
}
}
}
return null;
}
public Object getObject (int index) {
if(head != null) {
int size = this.size();
if(index<size-1 && index>0) {
Element element = head.getNextNode();
int i = 0;
while(element != null) {
if(index == i) {
return element.getData();
}
i++;
element = element.getNextNode();
}
}
}
return null;
}
public boolean contains(Object o) {
if(head != null) {
Element element = head.getNextNode();
while(element != null) {
if(element.getData() == o) return true;
element = element.getNextNode();
}
}
return false;
}
public boolean isEmpty() {
if(head == null) return true;
return false;
}
public void clear() {
head = null;
}
public boolean checkLoop() {
if(head != null) {
int size = this.size();
Set set = new HashSet();
for(int i=0; i<size; i++) {
Element element = this.getElement(i);
if(!set.contains(element)) {
set.add(element);
}
if(set.contains(element.getNextNode())) {
return true;
}
}
}
return false;
}
}