此时m=8,n=3,每次数3次就将那个数进行输出,输出后的数将会被释放
- 123输出3
- 456输出6
- 781输出1
- 245输出5
- 782输出2
- 478输出8
- 474输出4
- 777输出7
需要添加循环链表类,笔记里有!
main.cpp
#include"List.h"
#define M 8
#define N 3
typedef struct MYNUM
{
CircleLinkNode* node;
int val;
}MyNum;
void Myprint(CircleLinkNode* data)
{
MyNum * num = (MyNum*)data;
cout << num->val << " " ;
}
bool MyCompare(CircleLinkNode* data1, CircleLinkNode* data2)
{
MyNum* num1 = (MyNum*)data1;
MyNum* num2 = (MyNum*)data2;
if (num1->val == num2->val)
{
return true;
}
return false;
}
int main()
{
List* l = new List();
MyNum num[M];
for (size_t i = 0; i < 8; i++)
{
num[i].val = i + 1;
l->Insert_CircleLinkList(l->linklist,i,(CircleLinkNode*)&num[i]);
}
//打印
l->Print_CircleLinkList(l->linklist,Myprint);
cout << endl;
int index = 1;
//辅助指针
CircleLinkNode* pCurrent = l->linklist->head.next;
while (l->Size_CircleLinkList(l->linklist) > 1)
{
if (index == N)
{
MyNum* temNum = (MyNum*)pCurrent;
cout << temNum->val << " ";
//保存待删除节点的下一个节点
CircleLinkNode* pNext = pCurrent->next;
//根据值删除
l->RemoveByValue_CircleLinkList(l->linklist,pCurrent,MyCompare);
pCurrent = pNext;
if (pCurrent == &(l->linklist->head))
{
pCurrent = pCurrent->next;
}
index = 1;
}
pCurrent = pCurrent->next;
if (pCurrent == &(l->linklist->head))
{
pCurrent = pCurrent->next;
}
index++;
}
if (l->Size_CircleLinkList(l->linklist) ==1)
{
MyNum* tempNum = (MyNum*)l->Front_CircleLinkList(l->linklist);
cout << tempNum->val;
}
else
{
cout << "出错!" << endl;
}
return 0;
}