#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct single_link
{
int data;
struct single_link *next;
};
int main(void)
{
struct single_link *head=NULL,*tail=NULL,*tmp=NULL,*i_d_tmp=NULL;
int i=0,j=0;
for(i=0;i<5;i++)
{
tmp=(struct single_link *)malloc(sizeof(struct single_link));
tmp->data=i+1;
tmp->next =NULL;
if(head ==NULL)
head = tmp;
else
tail->next =tmp;
tail=tmp;
}
for(tmp=head;tmp;tmp=tmp->next)
printf("init data = %d\n",tmp->data);
i_d_tmp=(struct single_link *)malloc(sizeof(struct single_link));/*create a new node*/
i_d_tmp->data=6;
i_d_tmp->next =NULL;
for(tmp=head;tmp;tmp=tmp->next)
{
if(tmp->data>=3&&tmp->data<5)
{
i_d_tmp->next=tmp->next;/*add the position node*/
tmp->next=i_d_tmp;
break;
}
}
for(tmp=head;tmp;tmp=tmp->next)
printf("after add data=%d\n",tmp->data);
tmp=head;
for(i=0;i<6;i++)
{
if(tmp->data==4)
break;
else
tmp=tmp->next;
}
printf("delect pos=%d\n",i);
struct single_link *tmp_save=NULL;
for(tmp=head;tmp;tmp=tmp->next)
{
if(j==i)
{
tmp_save->next=tmp->next;
free(tmp);
tmp = NULL;
break;
}
if(j==(i-1))
tmp_save=tmp;
j++;
}
for(tmp=head;tmp;tmp=tmp->next)
printf("after delect data=%d\n",tmp->data);
tmp=head;
for(;;)
{
if(tmp->next == NULL)
{
tmp->next = head;
break;
}
else
tmp++;
}
i=0;
for(tmp=head;tmp;tmp=tmp->next)
{
if(tmp == head)
{
i++;
if(i>=5)
break;
printf("\n\n");
}
printf("circle link data=%d\n",tmp->data);
}
}
/*linux 2.6下gcc single.c,生成a.out,执行a.out*/