欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

java实现循环链表

发布时间:2024/4/15 编程问答 40 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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+"\t");}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));}}

  

转载于:https://www.cnblogs.com/lixiaolun/p/4643911.html

总结

以上是生活随笔为你收集整理的java实现循环链表的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。