题目描述:
0,1,...n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。
解题思路:利用链表实现首尾相连的圆圈,逐个从链表中删除结点,直到剩下最后一个结点。
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :val(x), next(NULL) {}
};
class Solution {
public:
int LastRemaining_Solution(int n, int m)
{
if(n == 0 || m == 0)
return -1;
ListNode *head = new ListNode(0);
ListNode *curr = head;
for (int i = 1; i < n; i++)
{
ListNode *tmp = new ListNode(i);
curr->next = tmp;
curr = curr->next;
}
curr->next = head;
while (head->next != head)
{
for (int i = 1; i < m - 1; i++)
{
head = head->next;
}
ListNode *tmp = head->next;
head->next = tmp->next;
head = head->next;
delete tmp;
}
return head->val;
}
};