循环单链表(Java实现)
/**
* 循环链表
*/
public class CycleLinkedList
{
private static final String TAG = "CycleChain";
private int size = 0;
private LinkedNode head = null;//头结点,相当于一个标签而已,不是链表众多节点的一部分
private LinkedNode cur = null;//记录插入之前时候的head的位置
class LinkedNode
{
Object value;
LinkedNode next = null;
LinkedNode(Object obj)
{
this.value = obj;
}
}
public boolean isEmpty()
{
return size == 0;
}
public int getSize()
{
return size;
}
public void insertHead(Object obj)
{
LinkedNode node = new LinkedNode(obj);
if (head == null)
{
node.next = head;
head = node;
cur = head;
head.next = head;
} else
{
while (head.next != cur)
{
head = head.next;
}
head.next = node;
head = node;
head.next = cur;
cur = head;
}
size++;
}
public void deleteHead() throws Exception
{
if (head == null) throw new Exception("空链表!");
while (head.next != cur)
{
head = head.next;
}
cur = cur.next;
head.next = cur;
head = cur;
}
public void display() throws Exception
{
if (head == null) throw new Exception("空链表!");
LinkedNode cur = head;
int i = 0;
while (cur != null && i < getSize() * 4)
{
System.out.print(cur.value.toString() + "->");
cur = cur.next;
i++;
}
System.out.println("");
}
public static void main(String[] args) throws Exception
{
CycleLinkedList cc = new CycleLinkedList();
cc.insertHead("哈哈");
cc.insertHead("ds");
cc.insertHead("123123你好");
cc.insertHead("ggt");
cc.display();
System.out.println("---");
cc.deleteHead();
cc.deleteHead();
cc.insertHead("test!");
cc.display();
System.out.println("---");
System.out.println(cc.getSize());
}
}
醉饮山林,自是闲暇白云间。笑红尘,总是爱恨贪嗔痴。若问人间逍遥在,风生之谷,客从山来。