用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。
//采用循环单链表结构来实现
//节点结构
struct LNode{
int num;
LNode *next;
};
int main()
{
int N,M;
cin>>N;
cin>>M;
LNode *head, *p, *r;
//创建第一个节点
head = (LNode*) malloc(sizeof(LNode));
head->num = 1;
//创建其他节点
p = head;
for(int i=2; i<=N; ++i){
p->next = (LNode*) malloc(sizeof(LNode));
p = p->next;
p->num = i;
}
//最后一个结点的指针域指向第一个结点,构成循环链表
p->next = head;
//输出循环链表的各个值
while(N--){
//计数到M
for(int m=1; m<M; ++m)
{
p = p->next; //p指向第M-1个节点
}
r = p->next; //r指向第M个节点
p->next = p->next->next;//删除第M个节点
cout<<(r->num)<<endl; //打印第M个节点的值
free(r);
}
return 0;
}
结果:
N = 15
M = 4
4
8
12
1
6
11
2
9
15
10
5
3
7
14
13