// ------------
// Reverse.java
// ------------
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.ListIterator;
final class Reverse {
/**
* O(1) in space
* O(n) in time
*/
public static void eval (long[] a, int b, int e) {
assert b <= e;
while (b < e) {
--e;
Swap.eval(a, b, e);
++b;}}
/**
* O(1) in space
* O(n) in time
*/
public static void eval (Object[] a, int b, int e) {
assert b <= e;
while (b < e) {
--e;
Swap.eval(a, b, e);
++b;}}
/**
* O(1) in space
* O(n) in time
*/
public static <T> void eval (List<T> x) {
final ListIterator<T> b = x.listIterator();
final ListIterator<T> e = x.listIterator(x.size());
while (b.nextIndex() < e.nextIndex()) {
final T v = b.next();
b.set(e.previous());
e.set(v);}}}
final class ReverseTest {
public static void main (String[] args) {
System.out.println("Reverse.java");
{
final long[] a = {2, 3, 4};
Reverse.eval(a, 0, a.length);
assert Arrays.equals(a, new long[]{4, 3, 2});
}
{
final Object[] a = {"abc", "def", "ghi"};
Reverse.eval(a, 0, a.length);
assert Arrays.equals(a, new String[]{"ghi", "def", "abc"});
}
{
final List<Object> x = Arrays.asList(new Object[]{"abc", "def", "ghi"});
Collections.reverse(x);
assert x.toString().equals("[ghi, def, abc]");
}
{
final List<Object> x = Arrays.asList(new Object[]{"abc", "def", "ghi"});
Reverse.eval(x);
assert x.toString().equals("[ghi, def, abc]");
}
System.out.println("Done.");}}
syntax highlighted by Code2HTML, v. 0.9.1