原创地址:http://blog.163.com/wupengzhi2005@126/blog/static/17101002201082992252813/
// 用户输入M,N值,从1至N开始顺序
// 循环数数,每数到M输出该数值,// 直至全部输出
#include < stdio.h >
// 节点
typedef struct node
{
int data ;
node * next ;
} node ;
// 创建循环链表
void createList ( node *& head , node *& tail , int n )
{
if ( n < 1 )
{
head = NULL ;
return ;
}
head = new node ();
head -> data = 1 ;
head -> next = NULL ;
node * p = head ;
for ( int i = 2 ; i < n + 1 ; i ++)
{
p -> next = new node ();
p = p -> next ;
p -> data = i ;
p -> next = NULL ;
}
tail = p ;
p -> next = head ;
}
// 打印循环链表
void Print ( node *& head )
{
node * p = head ;
while ( p && p -> next != head )
{
printf ( "%d " , p -> data );
p = p -> next ;
}
if ( p )
{
printf ( "%d/n" , p -> data );
}
}
// 用户输入M,N值,从1至N开始顺序
// 循环数数,每数到M输出该数值,
// 直至全部输出
void CountPrint ( node *& head , node *& tail , int m )
{
node * cur = head ;
node * pre = tail ;
int cnt = m - 1 ;
while ( cur && cur != cur -> next )
{
if ( cnt )
{
cnt --;
pre = cur ;
cur = cur -> next ;
}
else
{
pre -> next = cur -> next ;
printf ( "%d " , cur -> data );
delete cur ;
cur = pre -> next ;
cnt = m - 1 ;
}
}
if ( cur )
{
printf ( "%d " , cur -> data );
delete cur ;
head = tail = NULL ;
}
printf ( "/n" );
}
int main ()
{
node * head ;
node * tail ;
int m ;
int n ;
scanf ( "%d" , & n );
scanf ( "%d" , & m );
createList ( head , tail , n );
Print ( head );
CountPrint ( head , tail , m );
return 0 ;
}