private static CircleElement CreateCircleAndReturnFirst(uint n) { var first = new CircleElement(1); var previous = first; for (uint i = 2; i <= n; i++) { var next = new CircleElement(i); previous.Next = next; previous = next; } previous.Next = first; return(first); }
private static CircleElement FindTheLastOneLeft(CircleElement start, uint m) { var current = start; var previous = start.Next; while (previous.Next != current) { previous = previous.Next; } while (previous != current) { for (var j = 0; j < m - 1; j++) { previous = current; current = current.Next; } previous.Next = current.Next; current = current.Next; } return(current); }