public void Rotate(int idx, int n) { var t = stack.top() - 1; /* end of stack segment being rotated */ var p = stack.absIndex(idx) - 1; /* start of segment */ var m = n >= 0 ? t - n : p - n - 1; /* end of prefix */ stack.reverse(p, m); /* reverse the prefix with length 'n' */ stack.reverse(m + 1, t); /* reverse the suffix */ stack.reverse(p, t); }
public void Rotate(int idx, int n) { var t = stack.top - 1; var p = stack.absIndex(idx) - 1; int m; if (n >= 0) { m = t - n; } else { m = p - n - 1; } stack.reverse(p, m); stack.reverse(m + 1, t); stack.reverse(p, t); }