感觉我用循环链表的思路好像不是这题该有难度的解,不过想到链表(主要还是没想出来其他解法)很少写到今天就复习一下吧
上代码
#include <stdio.h>
#include <stdlib.h>
int num=1;
typedef struct lb
{
int b;//原先的序号
struct lb * next;
}ren;ren* kong_list(void)
{
ren *chengyuan=malloc(sizeof(ren)) ;//函数里不能直接用定义,否则出了函数就没了!!
chengyuan->b=num++;
chengyuan->next=NULL;
return chengyuan;
}int main(int argc, char *argv[])
{
//创建空链表
ren* head= kong_list();
ren* tmp=head;
int n,m,i;
scanf("%d",&n);
scanf("%d",&m);
for(i=0;i<n-1;i++)
{
tmp->next=kong_list();
tmp=tmp->next;
}
tmp->next=head;
//初始化完一个循环单向链表
for(i=1;tmp->next!=tmp ;i++)
{
if(i%10==m||i%m==0)
{
tmp->next=(tmp->next)->next;
}
else
{
tmp=tmp->next;
}
}
printf("%d",tmp->b);
// tmp=head;
// for(i=0;i<n;i++)
// {
// printf("%d",tmp->b);
// tmp=tmp->next;
// }
// 测试链表是否成功构建
return 0;
}
在写题的过程中发现对指针的使用和链表的结构有点陌生了
巩固一下做点小笔记:
- 头指针用于定位链表的开始,是链表的必须结构
- tmp是用于实现对链表每个元素的定位,若没有tmp这一指针无法实现对链表节点的控制
- 建立新的链表节点时用到了函数,需注意在函数里必须使用指针+malloc的形式创建链表节点,否则函数的生存期结束时空间就被释放了,节点就创建失败了
- 代码里用到了int num做全局变量,让对元素的计数更加方便