1.解题思路
简单阅读题目之后第一想法就是在数据结构中学习过的链表,而且是循环链表,即将最后一个节点的next指向第一个节点,链表的插入部分占用了大部分时间,原因是每次新分配空间的next忘记指向null,导致空指针问题。
2.通过代码
#include<iostream>
#include<malloc.h>
using namespace std;
typedef struct node{
int data;
node *next;
}node;
typedef struct node *linklist;
void add(linklist *L,int o)
{
linklist z,p;
z=(linklist)malloc(sizeof(node));
if (z)
{
p = *L;
while (p->next)
{
p = p->next;
}
z->data = o;
z->next = NULL;
p->next= z;
}
return;
}
void init(linklist *L)
{
*L=(linklist)malloc(sizeof(node));
if(*L)
(*L)->next=NULL;
return;
}
int main()
{
int m,n,i;
cin>>n>>m;
linklist L,K,N,temp;
init(&L);
for(i=0;i<n;i++)
{
add(&L,i+1);
}
K=L->next;
while(K->next)
{
K=K->next;
}
K->next=L->next;
N=L->next;
for(i=0;i<n;i++)
{
for(int j=1;j<m-1;j++)
{
N=N->next;
}
printf("%d ",N->next->data);
temp=N->next;
N->next=N->next->next;
N=N->next;
free(temp);
}
return 0;
}