-
题目描述
-
解题思路心得
好像就是按照题目说的写的,没啥特别的。
想起来是单向循环链表,考虑到头结点不算不设头结点又很难处理所以偷懒把链表尾连接到头结点的下一个节点上了,然后循环的时候报数因为是从第一个开始的到第n个是走了n-1次
-
代码
#include <iostream>
using namespace std;
struct LNode
{
int data;
LNode *next;
};
void Initlist(LNode *&L, int m)
{
LNode *p = L;
int i = 1;
while (m--)
{
LNode *tmp = new LNode;
tmp->data = i++;
tmp->next = NULL;
p->next = tmp;
p = p->next;
}
p->next = L->next;
}
void func(LNode *L, int m, int n)
{
LNode *p = L->next;
LNode *q = L;
while (m--)
{
for (int i = 0; i < n-1; i++)
{
p = p->next;
q = q->next;
}
cout << p->data;
if (m!= 0)
{
cout << " ";
}
q->next = p->next;
free(p);
p = q->next;
}
cout << endl;
}
int main()
{
int m = 0, n = 0;
while (1)
{
LNode *L = new LNode;
L->next = NULL;
cin >> m >> n;
if (m == 0 && n == 0)
break;
Initlist(L, m);
func(L, m, n);
}
return 0;
}