java中没有指针的概念,但是有对象的引用,java中链表的实现就是通过对象的引用实现的。下面是一个链表的简单实现
class Link {
class Element {
public Object value = null;
public Element nextNode = null;
}
private Element header = null;
public void add(Object node) {
if (header == null) {
header = new Element();
header.value = null;
header.nextNode = null;
}
Element element = new Element();
element.value = node;
element.nextNode = header.nextNode;
header.nextNode = element;
}
public boolean remove(Object obj) {
if (header == null) {
return false;
}
Element pre = header;
Element ele = header.nextNode;
while(ele != null) {
if (ele.value == obj) {
pre.nextNode = ele.nextNode;
return true;
}
pre = ele;
ele = ele.nextNode;
}
return false;
}
public void clear() {
header = null;
}
public boolean contains(Object obj) {
if (header == null) {
return false;
}
Element elm = header.nextNode;
while(elm != null) {
if (elm.value == obj) {
return true;
}
elm = elm.nextNode;
}
return false;
}
public Element getElement(int index) {
if (header == null) {
return null;
}
if (index > (this.Size()-1) || index < 0) {
return null;
}
int i = 0;
Element ele = header.nextNode;
while(ele != null) {
if (i == index) {
return ele;
}
i++;
ele = ele.nextNode;
}
return null;
}
public int Size() {
if (header == null) {
return 0;
}
int size = 0;
Element ele = header.nextNode;
while(ele != null) {
size++;
ele = ele.nextNode;
}
return size;
}
public boolean checkLoop()
{
if (header==null) {
return false;
}
int size = this.Size();
if (size == 0) {
return false;
}
Set<Element> set = new HashSet<Element>();
for (int i = 0; i < size ;i ++) {
Element el = getElement(i);
if(!set.contains(el)) {
set.add(el);
}
if(set.contains(el.nextNode)) {
return true;
}
}
return false;
}
}