单项循环链表的实现

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;
}
posted @ 2026-08-20 08:55  9Tired  阅读(1)  评论(0)    收藏  举报