数据结构C语言程序设计编程题,请问这个程序怎么编?

如题所述

第1个回答  2021-01-19
#include<stdio.h>
#include<stdlib.h>
typedef struct List
{
int data;
struct List *next;
}list;

int main()
{
list *L = (list*)calloc(1, sizeof(list)); //头结点
L->next = NULL;
int n, k, i;
scanf("%d%d", &n, &k);

list *s, *q = L;
for (i=0; i<n; ++i) //赋初值
{
s = (list*)calloc(1, sizeof(list));
s->data = i+1;
s->next = NULL;
q->next = s;
q = s;
}

q->next = L->next; //让尾结点指向头结点的下一个,即第一个人的位置,单向循环链表创建完成
q = L->next; //让q指向头结点的下一个

while (q->next != q) //只剩一个元素时,退出循环
{
for (i=1; i<k-1; ++i)
{q = q->next;} //q指向删除节点的前一个
s = q->next; //s指向删除节点
q->next = s->next; //将去除s后的链表重新连接起来
q = q->next; //让q指向下次循环的起始位置
//printf("%d ", s->data);
free(s);
s = NULL;
}

printf ("%d\n", q->data);
free(q);
q = NULL;
free(L);
L = NULL;
return 0;
}
相似回答