题解 | #环形链表的约瑟夫问题#
环形链表的约瑟夫问题
https://www.nowcoder.com/practice/41c399fdb6004b31a6cbb047c641ed8a
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @param m int整型 * @return int整型 */ typedef struct ListNode ListNode; ListNode* BuyNode(int n) { ListNode* pf = (ListNode*)malloc(sizeof(ListNode)); if(pf==NULL) { exit(-1); } pf->val = n; pf->next = NULL; return pf; } ListNode* LinkList(int n) { ListNode* phead = BuyNode(1); ListNode* ptail = phead; for(int i = 2;i<=n;i++) { ptail->next = BuyNode(i); ptail = ptail->next; } ptail->next = phead; return ptail; } int ysf(int n, int m ) { ListNode* prev = LinkList(n); ListNode* pcur = prev->next; int count = 1; while(pcur->next!=pcur) { if(count==m) { prev->next = pcur->next; free(pcur); pcur = prev->next; count = 1; } else { prev = pcur; pcur = pcur->next; count++; } } return pcur->val; }