代码实现
typedef struct node
{
int data;//数据域
struct node *next;
}NODE,*PNODE;
PNODE init_link_list(void)//单链表初始化
{
PNODE phead = malloc(sizeof(NODE));
if(phead == NULL)
{ exit(-1);}
phead->next = phead;
return phead;
}
PNODE new_node(int dat)
{
PNODE pnew =malloc(sizeof(NODE));
if(pnew == NULL)
return pnew;
pnew->data = dat;
pnew->next = NULL;
return pnew;
}
bool insert_node_tail(PNODE phead,PNODE pnew)//把地址为pnew的节点插入到单向循环链表的尾部(头节点前面)
{
if(pnew == NULL || phead == NULL)
return false;
PNODE p = phead->next;
while(p->next != phead)
p = p->next;
pnew->next = phead;
p->next = pnew;
return true;
}
bool is_empty(PNODE phead)//判断链表为空,没有满的情况
{
if(phead->next == phead)
return true;
else
return false;
}
void show_list(PNODE phead)//链表的遍历
{
PNODE p = NULL;
if(is_empty(phead))
{
printf("list is empty!\n");
return;
}
p = phead->next;
while(p != phead)//遍历
{
printf("%d\t",p->data);
p = p->next;
}
printf("\n");
}
bool del_node(PNODE phead,PNODE pdel)//单向循环链表的删除
{
PNODE p;
if(phead == pdel || phead == NULL || pdel == NULL)
return false;
//p = phead->next
p = phead;
while(p->next != phead)
{
if(p->next == pdel )
break;
p = p->next;
//ptmp= ptmp->next;
}
if(p->next != pdel)
return false;
//删除节点
p->next = pdel->next;
pdel->next = NULL;
//free(pdel);
return true;
}