版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013293125/article/details/52950105
一、描述
循环链表:表中的最后一个节点的指针域指向头结点,整个链表形成一个环。
循环链表判空条件:有的说是判断p或p->next是否等于头指针,有的说判断tail是否等于head,有的说判断head是否为空,这其实要根据实际情况来判断。若是不带头结点(这里说带头结点是只一个空的节点做为头结点)循环链表,则可以用判断head是否为空来判断链表是否为空。若是带头结点,则可以根据判断tail是否等于head来判断循环链表是否为空。
循环链表的操作和线性链表基本一致,这里就只是简单地介绍一下。
带头结点的循环链表如下:
不带头结点的循环链表如下:
二、代码实现
2.1 CircleLinkList.java
package com.yds.list;
public class CircleLinkList<T>{
Node head,tail;
Node p;
int size = 0;
public CircleLinkList(){
this.head = null;
tail = head;
p = head;
}
public int length(){
return size;
}
/**
* 添加节点
* @param data
*/
public void add(T data){
Node node = new Node<T>(data);
if(head==null){
head = node;
tail = head;
p = head;
size++;
}
else{
node.next = head;
head = node;
tail.next = head;
p = head;
size++;
}
}
/**
* 得到数据
* @param index
* @return
*/
public T get(int index){
int i = 0;
p = head;
while(i!=index&&p!=tail){
i++;
p = p.next;
}
return (T) p.data;
}
/**
* 不带头结点的头插法,所谓不带头结点是指不带为空的头结点。
* 所以判断链表为空的条件不一样
* @return
*/
public boolean isEmpty(){
if(head!=null)
return false;
else
return true;
}
}
2.2 JavaMain.java
package com.yds.list;
public class JavaMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
CircleLinkList<Integer>listA = new CircleLinkList<Integer>();
int[] la = {
1,3,2,5,4,8
};
System.out.println("循环链表是否为空?"+listA.isEmpty());
for (int i = 0; i < la.length; i++) {
listA.add(la[i]);
}
for (int i = 0; i < listA.length(); i++) {
System.out.println(listA.get(i));
}
System.out.println("循环链表长度:"+listA.length());
System.out.println("循环链表是否为空?"+listA.isEmpty());
}
}
三、结果截图