前几天没事,学习循环链表时候写的关于出圈问题的代码~~~~
所谓出圈问题是指N个人排成一圈,然后报数,谁报到指定的数字,然后“出圈”,也就是从链表里删除,然后再从一开始报数,知道剩下最后一个为止,然后输出这个数。
#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
int value;
struct Node *next;
}NODE;
void initcir(NODE *header);
void outputscir(NODE *header);
void calculatecir(NODE *header,int value);
int main()
{
NODE *header=NULL;
header=(NODE*)malloc(sizeof(NODE));
header->value=0;
header->next=NULL;
int i=1;
initcir(header);
// outputscir(header);
calculatecir(header,3);
freecir(&header);
return 1;
}
void initcir(NODE *header)
{
NODE * header_point=header;
int i;
for(i=1;i<11;i++){
NODE *node=(NODE*)malloc(sizeof(NODE));
node->value=i;
node->next=NULL;
header_point->next=node;
header_point=header_point->next;
}
header_point->next=header;
}
void freecir(NODE **header)
{
NODE * header_point=*header;
while(header_point->next !=)
}
void outputscir(NODE *header)
{
NODE * temp_point=header->next;
printf("outputs begin:/n");
while(temp_point != header){
printf("*******value:%d/n",temp_point->value);
temp_point=temp_point->next;
}
printf("outputs end/n");
}
void calculatecir(NODE *header,int value)
{
printf("*******value:%d/n",value);
NODE * temp_point=header;
NODE * node=NULL;
int i=1;
while(header->next->next!=header){
if(temp_point==header){
node=temp_point;
temp_point=temp_point->next;
}
if(i<value){
node=temp_point;
temp_point=temp_point->next;
i++;
}
else{
node->next=temp_point->next;
temp_point->next=NULL;
free(temp_point);
temp_point=node->next;
i=1;
}
}
printf(" the lastone :%d/n",header->next->value);
}