typedef int DataType_t;
typedef struct CircularLinkedList
{
DataType_t data; //节点的数据域
struct CircularLinkedList * next;//结点的指针域
}CircuLList_t;
//创建一个空链表,使用头节点所以需要申请头节点内存并且初始化
CircuLList_t * Circular_CreateLinkedList(void)
{
CircuLList * Head = (CircuLLISt * )calloc(1,sizeof(struct CircularLinkedLIst));
if(NULL == Head){
perror("Create memory of Head is failed");
exit(-1);
}
Head->next=Head;
return Head;
}
CircuLList_t * Circular_CreateLinkedList(DataType_t data)
{
CircuLList * NewNode = (CircuLLISt * )calloc(1,sizeof(struct CircularLinkedLIst));
if(NULL== NewNode){
perror("Create NewNode is failed");
return NULL;
}
NewNode->data = data;
NewNode->next = NULL:
return NewNode;
}
bool CirLinkedList_InsertHead(CircuLList_t * Head , DataType_t data) //头插
{
CircuLList_t * Phead = Head;
CircuLList_t * Node = Circular_CreateLinkedList(data);
if(NULL == Node){
perror("Insert is failed");
return false;
}
//链表为空
if(Head == Head->next){
Head->next = Node;
Node ->next = Node;
return true;
}
while(Phead-next) //先循环找尾结点
{
Phead = Phead-next;
if(Phead->next == Head->next) break;
}
Node->next = Head->next;
Phead->next=Node;
Head->next = Node;
return true;
}
bool CirLinkedList_InsertTail(CircuLList_t * Head , DataType_t data)//尾插
{
CircuLList_t * Phead = Head;
CircuLList_t * Node = Circular_CreateLinkedList(data);
if(NULL == Node){
perror("Insert is failed");
return false;
}
//链表为空
if(Head == Head->next){
Head->next = Node;
Node ->next = Node;
return true;
}
while(Phead->next){
Phead = Phead->next;
//找到最后一个结点
if(Phead->next == Head ->next){
break;
}
}
Node->next=Head->next;
Phead->next =Node;
return true;
}
bool CirLinkedList_Insert(CircuLList_t * Head ,DataType_t dest, DataType_t data)//中间插
{
CircuLList_t * Phead = Head;
CircuLList_t * Node = Circular_CreateLinkedList(data);
if(NULL == Node){
perror("Insert is failed");
return false;
}
//链表为空
if(Head == Head->next){
Head->next = Node;
Node ->next = Node;
return true;
}
while(Phead->next){
Phead = Phead->next;
if(Phead->data == dest ) break;
}
Node->next=Phead->next;
Phead->next=Node;
return true;
}
bool CirLinkedList_Insert(CircuLList_t * Head ) //头删除
{
CircuLList_t * Phead = Head;
CircuLList_t * Temp = Head->next;
if(Head->next == Head) return true;
if( Head-next == Temp->nex t){
Temp->next = NULL;
Head->next=Head;
free(Temp);
return true;
}
while(Phead->next){
Phead = Phead->next;
if(Phead->next==Head->next){
break;
}
}
Phead->next=Temp->next;
Head->next = Temp->next;
Temp->next = NULL;
free(Temp);
return true;
}
bool CirLinkedList_Insert(CircuLList_t * Head ) //尾部删除
{
CircuLList_t * Phead = Head;
CircuLList_t * Temp ;
while(Phead->next){
Phead = Phead->next;
if(Phead->next->next == Head->next) break;
}
if(Phead == Head->next){
Phead->next=NULL;
Head->next = NULL;
free(Phead);
}
Temp = Phead->next;
Phead->next=Head->next;
Temp->next = NULL;
free(Temp);
return true;
}
bool CirLinkedList_Insert(CircuLList_t * Head,DataType_t dest) //中间删除
{
CircuLList_t * Phead = Head;
CircuLList_t * Temp ;
while(Phead->next){
Phead = Phead->next;
if(Phead->next->data == dest) break;
}
if(Phead == Head->next){
Phead->next=NULL;
Head->next = NULL;
free(Phead);
}
Temp=Phead->next;
Phead->next=Temp->next;
Temp->next = NULL;
free(Temp);
return true;
}