我们知道,链表是最基本的一种数据结构,在实际开发过程中也有很大用处,以下是我用java写的循环链表的定义以及一些基本操作:
public class circleLinkedList {
// 定义元素数据类型(链表)
public class Element {
private Element next = null;
private Object value = null;
}
private Element header = null;
// 初始化链表
public void initLinkedList(Object o) {
header = new Element();
header.value = o;
header.next = header;
}
// 插入元素
public void insertElement(Object o) {
Element e = new Element();
e.value = o;
if (header.next == header) {
header.next = e;
e.next = header;
} else {
// 栈中temp和header同指向堆中initLinkedList中new的的Element对象
Element temp = header;
while (temp.next != header) {
temp = temp.next;
}
temp.next = e;
e.next = header;
}
}
// 删除元素
public void deleteElement(Object o) {
Element temp = header;
while (temp.next != header) {
if (temp.next.value != o) {
temp = temp.next;
} else {
temp.next = temp.next.next;
break;
}
}
}
// 链表中是否存在该元素
public Boolean isContianed(Object o) {
Element temp = header;
while (temp.next.value != o) {
temp = temp.next;
if (temp.next == header) {
return false;
}
}
return true;
}
// 链表长度
public int circleLinkedListSize(Element first) {
Element temp = first;
int size = 1;
try {
while (temp.next != first) {
size++;
temp = temp.next;
}
} catch (Exception e) {
e.printStackTrace();
}
return size;
}
/**
* 获取链表的第i个位置的元素
* */
public Element getElement(int i) {
if (i <= 0 || i > circleLinkedListSize(header)) {
System.out.println("获取链表的位置有误!返回null");
return null;
} else {
int count = 0;
Element element = new Element();
Element temp = header;
while (temp.next != header) {
count++;
if (count == i) {
element.value = temp.next.value;
}
temp = temp.next;
}
return element;
}
}
循环链表与单链表的不同就是头指针初始化的时候,有一句header.next = header;
这样就使得链表头尾相接。