单项循环链表

单向循环链表
1。节点
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;

}listnode,*linklist;

2.声明单向循环空链表,不带头结点的单向循环链表
linklist init_list()
{
linklist L =NULL
return L;
}

bool is_empty(linklist L)//判断是否为空链表
{
return L ==NULL
}

3.插入数据
//bool inser_node(int data,struct node *l)
bool inser_node(int data,linklist *l)//主要因为这里要对头进行操作所有需要取*,传地址,否则只能对形参产生影响,而不影响实参的变化。
{
//产生新节点
linklist new =malloc();
new->data=data;

//
if(is_empty(*pl))
{
*l=new;
new->next=new;//循环,指向自身
return true;
}


//链表不为空插入节点
linklist p = *l;
while(p->next!=*l)
{
p=p->next;
}
new->next=*l;
p->next=new;
return true;

}


4.
show(linklist L)
{

linklist p=L;
while(p->next!=L)
{
printf("",p->data)
p=p->next;
}
printf("",p->data)//打印节点,注意最后一个节点需要格外打印

}
int main()
{
linklist L;
L=init_list();
for(i=1;i<=5;i++)
{
inser_node(i,&L);//这里注意取地址
}


}

原文地址:https://www.cnblogs.com/defen/p/5201860.html