#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int num;
struct Node *next;
} LinkList;
LinkList *creat(int n)
{
LinkList *p, *q, *head;
int i = 1;
p = (LinkList *)malloc(sizeof(LinkList));
p->num = i;
head = p;
for (i = 2; i <= n; i++)
{
q = (LinkList *)malloc(sizeof(LinkList)); /*Malloc()向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。*/
q->num = i;
p->next = q;
p = q;
}
p->next = head; /*使链表尾指向链表头 形成循环链表*/
return head;
}
void fun(LinkList *L, int m)
{
int i;
LinkList *p, *s, *q;
p = L;
printf("出列顺序为:");
while (p->next != p)
{
for (i = 1; i < m; i++) /*从1开始*/
{
q = p;
p = p->next;
}
printf("%5d", p->num);
s = p;
q->next = p->next;
p = p->next; /*使p指向新的起点*/
free(s);/*free()与malloc()函数配对使用,释放malloc函数申请的动态内存*/
}
printf("%5d\n", p->num);
}
int main()
{
LinkList *L;
int n, m;
n = 9;
m = 5;
L = creat(n);
fun(L, m);
return 0;
}