public classLinkedListTest {public static voidmain(String[] args) {
Node A= new Node("A");
Node B= new Node("B");
Node C= new Node("C");
Node D= new Node("D");
Node E= new Node("E");
Node F= new Node("F");
A.next=B;
B.next=C;
C.next=D;
D.next=E;
E.next=F;
print(A);
LinkedListReversor reversor=LinkedListReversor.RECURSION;
System.out.println(reversor.getStrategy()+ ":");
Node tmp=reversor.execute(A);
print(tmp);
reversor=LinkedListReversor.NO_RECURSION;
System.out.println(reversor.getStrategy()+ ":");
print(reversor.execute(tmp));
}private static voidprint(Node node) {while (node != null) {
System.out.print(node.value);
node=node.next;if (node != null) {
System.out.print("->");
}else{
System.out.println();
}
}
}
}classNode {publicString value;publicNode next;publicNode(String value) {this.value =value;
}
}enumLinkedListReversor {
RECURSION("递归") {
@OverridepublicNode execute(Node node) {
Node prev= null;if (node == null || node.next == null) {
prev=node;
}else{
Node tmp=execute(node.next);
node.next.next=node;
node.next= null;
prev=tmp;
}returnprev;
}
},
NO_RECURSION("非递归") {
@OverridepublicNode execute(Node node) {
Node prev= null;while (node != null) {
Node tmp=node;
node=node.next;
tmp.next=prev;
prev=tmp;
}returnprev;
}
};privateString strategy;privateLinkedListReversor(String strategy) {this.strategy =strategy;
}public abstractNode execute(Node node);publicString getStrategy() {returnstrategy;
}
}