#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct Node
{
int elem ;
struct Node * next ;
} Node ;
typedef struct CycleLinkList
{
Node * head ;
} CycleLinkList ;
// 初始化循环链表
void InitCycleLinkList( CycleLinkList * C )
{
C->head = (Node*)malloc(sizeof(Node)) ;
if( !C->head )
{
printf("申请内存失败!") ;
exit(0) ;
}
C->head->next = NULL ;
}
// 插入
void Insert( CycleLinkList * C , int elem )
{
Node * node = (Node*)malloc(sizeof(Node)) ;
if( !node)
{
printf("申请内存失败!") ;
exit(0) ;
}
node->elem = elem ;
if( C->head->next == NULL ) // 循环链表为空
{
C->head->next = node ;
node->next = C->head->next ;
}
else
{
Node * p = C->head->next ;
while( p->next != C->head->next )
{
p = p->next ;
}
p->next = node ;
node->next = C->head->next ;
}
}
// 删除
void Delete( CycleLinkList * C , int elem )
{
Node * p = C->head->next ;
Node * q = p ;
while( p->elem != elem )
{
q = p ;
p = p->next ;
}
if( p == C->head->next )
{
q->next = p->next ;
C->head->next = p->next ;
free(p) ;
}
else
{
q->next = p->next ;
free(p) ;
}
}
// 输出
void Print( CycleLinkList * C )
{
Node * p = C->head->next ;
while( p->next != C->head->next )
{
printf("%d " , p->elem ) ;
p = p->next ;
}
printf("%d " , p->elem ) ;
}
//测试
int main()
{
CycleLinkList C ;
InitCycleLinkList( &C ) ;
Insert( &C , 5 ) ;
Insert( &C , 3 ) ;
Insert( &C , 8 ) ;
Print( &C ) ;
printf("\n") ;
Delete( &C , 3 ) ;
Print( &C ) ;
printf("\n") ;
return 0 ;
}