import java.util.concurrent.ExecutionException;
public class Test {
public static void main(String[] args) throws ExecutionException, InterruptedException {
Unit u1 = new Unit("A",1,null);
Unit u2 = new Unit("B",2,null);
Unit u3 = new Unit("C",3,null);
Unit u4 = new Unit("D",4,null);
u1.setNextUnit(u2);
u2.setNextUnit(u3);
u3.setNextUnit(u4);
reverse(u1);
System.out.println(u4);
}
public static Unit reverse(Unit headUnit){
if(headUnit.getNextUnit()==null){
return headUnit;
}
Unit newUnit = reverse(headUnit.getNextUnit());
newUnit.setNextUnit(headUnit);
headUnit.setNextUnit(null);
return headUnit;
}
static class Unit{
private String name;
private Object data;
private Unit nextUnit;
public Unit(Object data, Unit nextUnit) {
this.data = data;
this.nextUnit = nextUnit;
}
public Unit(String name, Object data, Unit nextUnit) {
this.name = name;
this.data = data;
this.nextUnit = nextUnit;
}
public Unit getNextUnit() {
return nextUnit;
}
public void setNextUnit(Unit nextUnit) {
this.nextUnit = nextUnit;
}
@Override
public String toString() {
String nextUnitToString = null==this.nextUnit?"":this.nextUnit.toString();
String nextName = null==this.nextUnit?"null":this.nextUnit.name;
return "["+this.data+"|"+nextName+"]\t"+nextUnitToString;
}
}
}