循环单链表的实现java

版权声明:本文为博主原创文章,允许转载共享,但是请注明出处! https://blog.csdn.net/xixirupan/article/details/54773782
循环链表(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();
	}

}

猜你喜欢

转载自blog.csdn.net/xixirupan/article/details/54773782