循环链表(circle linked list)是另一种形式的链式存储结构 它的特点是表中最后一个节点的指针域指向头结点 整个链表形成一个环,由此,从表中任一点出发均可以找到表中其他节点
package linkList;
/*
* 单向循环链表
*/
class Element {
//当前元素值
public Object value =null;
//指向下一个元素的指针
public Element nextElement=null;
//无参构造方法
public Element()
{
}
//有参构造方法
public Element(Object value ,Element nextElement)
{
this.value =value;
this.nextElement=nextElement;
}
}
public class CircleLinkedList {
//初始状态下链表的头指针为空
public Element header=null;
/*
* 初始化链表
*/
void intList()
{
header =new Element();
//header中不存储内容
header.value =null;
//头指针的下一个节点指向自己
header.nextElement =header;
}
/*
* 插入链表
*/
public void insertList(Object o)
{
Element element =new Element(o,header);
//第一次插入元素
if(header.nextElement==header)
{
header.nextElement=element;
}//不是第一次插入元素
else {
Element temp =header;
while (temp.nextElement!=header) {
temp=temp.nextElement;
}
temp.nextElement=element;//新插入的最后一个节点指向第一个节点
}
}
//获取俩表的长度
public int getLength() {
int count=0;
if(header==null||header.nextElement==header)
{
return 0;
}else {
while(header.nextElement!=header)
{
count++;
}
return count;
}
}
/*
* 删除链表中指定元素
*/
public void deletIndexI(Object o) {
Element element =new Element();
element =header;
while (element.nextElement!=header) {
if(element.nextElement.value.equals(o))
{
element.nextElement =element.nextElement.nextElement;
}else {
element =element.nextElement;
}
}
}
/*
* 获取第i位置上元素
*/
public Object getIndexI(int i)
{
Element temp =header;
int count=0;
while (temp.nextElement!=header) {
count++;
if(count==i)
{
return temp.nextElement.value;
}
temp =temp.nextElement;
}
return null;
}
/*
* 判断链表中是否存在某个元素
*/
public boolean isExit(Object o)
{
Element element =header;
while (element.nextElement!=header)
{
element =element.nextElement;
System.out.println(element.value);
if(element.value.equals(o))
{
return true;
}
}
return false;
}
/*
* 打印整个链表中数据
*/
public void prinList()
{
Element element =header.nextElement;
while (element.nextElement!=header) {
System.out.print(element.value+" ");
element=element.nextElement;
}
System.out.print(element.value+" ");
System.out.println();
}
//测试数据
public static void main(String[] args) {
CircleLinkedList list =new CircleLinkedList();
list.intList();
for (int i = 0; i < 11; i++) {
list.insertList(i);
}
list.prinList();
System.out.println("是否存在:"+list.isExit( new Integer(5)));
System.out.println("获取i位置上元素:"+list.getIndexI(12));
//删除指定元素
list.deletIndexI(8);
list.prinList();
}
}