• java实现循环链表


    前面已经介绍了java实现单链表:http://www.cnblogs.com/lixiaolun/p/4643886.html

    其实两者的主要差别就在于如何判断是否到了链表的结尾:

    在单链表中

    while(temp.next!=null)
    {
    	temp=temp.next;
    }
    

    在循环链表中

    while(temp.next!=header)
    {
    	temp=temp.next;
    }
    

    下面是循环链表的代码和测试代码:

    循环链表的代码:

    package circularlinkedlist;
    
    public class CircularLinkedList {
    	
    	class Element
    	{
    		public Object value=null;
    		private Element next=null;
    	}
    	private Element header = null;//头结点
    	/**
    	 * 初始化链表
    	 * */
    	void initList()
    	{
    		header = new Element();
    		header.value=null;
    		header.next=header;
    	}
    	
    	/**
    	 * 插入链表
    	 * */
    	void insertList(Object o)
    	{
    		Element e=new Element();
    		e.value=o;
    		if(header.next==header)//第一次插入元素
    		{
    			header.next=e;
    			e.next=header;
    		}else//不是第一次插入元素
    		{
    			//temp引用在栈中,temp和header引用都指向堆中的initList()中new的Element对象
    			Element temp = header;
    			while(temp.next!=header)//寻找最后一个元素
    			{
    				temp=temp.next;
    			}
    			temp.next=e;
    			e.next=header;//新插入的最后一个节点指向头结点
    		}
    	}
    	
    	/**
    	 * 删除链表中第i个元素
    	 * */
    	void deletelist(Object o)
    	{
    		Element temp =header;
    		while(temp.next!=header)
    		{
    			//判断temp当前指向的结点的下一个结点是否是要删除的结点
    			if(temp.next.value.equals(o))
    			{
    				temp.next=temp.next.next;//删除结点
    			}else
    			{
    				temp=temp.next;//temp“指针”后移
    			}
    		}
    	}
    	
    	/**
    	 * 获取链表的第i个位置的元素
    	 * */
    	Element getElement(int i)
    	{
    		if(i<=0 || i>size())
    		{
    			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;
    		}
    	}
    	/**
    	 * 链表长度
    	 * */
    	int size()
    	{
    		Element temp = header;
    		int size=0;
    		while(temp.next!=header)
    		{
    			size++;
    			temp=temp.next;
    		}
    		return size;
    	}
    	
    	/**
    	 * 判断链表中是否存在某元素
    	 * */
    	Boolean isContain(Object o)
    	{
    		Element temp =header;
    		while(temp.next!=header)
    		{
    			if(temp.next.value.equals(o))
    			{
    				return true;
    			}
    			temp=temp.next;
    		}
    		return false;
    	}
    	/**
    	 * 打印链表
    	 * */
    	void print()
    	{
    		System.out.print("打印链表:");
    		Element temp =header;
    		while(temp.next!=header)
    		{
    			temp=temp.next;
    			System.out.print(temp.value+"	");
    		}
    		System.out.println();
    	}
    }
    

    测试代码:

    package circularlinkedlist;
    
    public class CircularLinkedListMain {
    
    	public static void main(String[] args) {
    		CircularLinkedList clList = new CircularLinkedList();
    		clList.initList();
    		clList.insertList(1);
    		clList.insertList(2);
    		clList.insertList(3);
    		clList.insertList(4);
    		clList.insertList(5);
    		clList.print();
    		
    		System.out.println("链表长度:"+clList.size());
    		clList.deletelist(1);
    		clList.deletelist(5);
    		clList.print();
    		System.out.println("第1个元素值为:"+clList.getElement(1).value);
    		System.out.println("第2个元素值为:"+clList.getElement(2).value);
    		System.out.println("第3个元素值为:"+clList.getElement(3).value);
    	
    		System.out.println(clList.isContain(2));
    		System.out.println(clList.isContain(6));
    //		System.out.println(clList.isContain(5));
    	}
    
    }
    

      

  • 相关阅读:
    学生3D作品---李自立---熊猫(Blender 2.8)
    学生3D作品---李自立---台式电脑加椅子(Blender 2.8)
    Tweak Kernel’s Task Scheduler to Boost Performance on Android [Part 2]
    Tweak Kernel’s Task Scheduler to Boost Performance on Android [Part 1]
    Binder transactions in the bowels of the Linux Kernel
    操作系统原理——实验——作业命名格式
    Linux 引入自动化测试平台 KernelCI
    进程可创建的最大连接数
    Docker—PaaS—微服务
    3D学院人才培养的金字塔模型-张同光-20190924---发言稿
  • 原文地址:https://www.cnblogs.com/lixiaolun/p/4643911.html
Copyright © 2020-2023  润新知