单循环链表是尾节点指针指向头结点的单链表。它是一个闭合的循环链表,即通过其中的任何一个结点都可以访问到别的结点,且其结点数据结构struct和普通单链表相同。其基本实现代码如下:
#include<iostream>
using namespace std;
struct node
{
int data;
node *next;
};
//初始化单循环链表为空
void initCL(node *CL)
{
if(CL != NULL)
CL->next = CL;
else
CL = (node*)malloc(sizeof(node));
CL->next = CL;
}
// 创建单循环链表
node * creatlink(int n)
{
node *head = (node*)malloc(sizeof(node));
head->next = head;
node *p = head;
for(int i = 0; i < n; i++)
{
node *s = (node*)malloc(sizeof(node));
int x;
cin >> x;
s->data = x;
p->next = s;
s->next = head;
p = s;
}
return head;
}
//打印单循环链表
int show(node *head)
{
if((head == NULL) || (head->next == head))
return -1;
node *p = head->next;
while(p != head)
{
cout << p->data << ends;
p = p->next;
}
cout << endl;
return 0;
}
// 在链表前端插入结点
void insertfront(node *head, int x)
{
node *s = (node*)malloc(sizeof(node));
s->data = x;
s->next = head->next;
head->next = s;
}
//在末端插入结点
void insertend(node *head, int x)
{
node *p = head->next;
while(p->next != head)
{
p = p->next;
}
node *s = (node*)malloc(sizeof(node));
s->data = x;
s->next = head;
p->next = s;
}
//删除末端结点
void delenail(node *head)
{
node *p = head->next;
node *q;
while(p->next != head)
{
q = p;
p = p->next;
}
q->next = p->next;
free(p);
}
int main()
{
node *head = creatlink(4);
show(head);
insertfront(head, 100);
show(head);
insertend(head, 20);
show(head);
delenail(head);
show(head);
system("pause");
return 0;
}