c语言报数函数问题,[编程入门]报数问题-题解(C语言代码)

#include typedef struct student {

int number;

struct student *next;

}*node, Node; /* 定义结点*/

node creat(int n); //创建链表函数

void function(node l1, int baoshu); //声明运行函数

int i;

int main()

{

int n; //人数

node head1; //链表的头结点

int baoshu = 3;

scanf("%d",&n);

head1 = creat(n);

function(head1,baoshu);

return 0;

}

node creat( int n)

{

node h; //头结点指针

h = (node)malloc(sizeof(Node)); //创建头结点

h->next = NULL; //头结点的next赋为空

node q = h; //q指向头结点

node p; //定义指针p

for(i=1;i<=n;i++) //创建n个结点

{

p = (node)malloc(sizeof(Node));

(*p).number = i; //输入结点编号

p->next = q->next; //采用尾插法插入结点

q->next = p;

q = p;

}

q->next = h->next; //尾结点和首节点连接

return(h); //返回头结点

}

void function(node l1, int baoshu) //移除结点

{

node p = l1->next; //指向首节点

free(l1); //移除头结点

node q = NULL; // 指向被移除的结点,释放移除的结点

while(p->next!=p)

{

for( i=1;i<=baoshu-2;i++)//??移动到离开的人的结点的前一个,只需要移动baoshu-2

{

p = p->next;

q = p->next; //记录删除的人的结点

p->next = q->next; //把q结点从链表移除

p = p->next; //移动到下一个开始报数的人,很重要的一步

free(q); //释放q结点

}

}

printf("%d",p->number);

free(p); //把最后一个结点free

}

```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值