public class LLStringNode { private String info; private LLStringNode link; public LLStringNode(String info) { this.info = info; link = null; } public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } public LLStringNode getLink() { return link; } public void setLink(LLStringNode link) { this.link = link; } } public class DemoReversePrint { public static void main (String[] args) { LLStringNode node1 = new LLStringNode("node # 1"); LLStringNode node2 = new LLStringNode("node # 2"); LLStringNode node3 = new LLStringNode("node # 3"); LLStringNode node4 = new LLStringNode("node # 4"); node1.setLink(node2); node2.setLink(node3); node3.setLink(node4); System.out.println("Printing in original order"); printFor(node1); System.out.println("Printing in reverse order"); printRev(node1); System.out.println("Printing forward recursively"); printForRec(node1); } public static void printFor(LLStringNode node) { while (node != null) { System.out.println(" " + node.getInfo() ); node = node.getLink(); } } public static void printRev(LLStringNode node) { if (node.getLink() != null) printRev(node.getLink()); System.out.println (" " + node.getInfo() ); } public static void printForRec(LLStringNode node) { System.out.println (" " + node.getInfo() ); if (node.getLink() != null) printForRec(node.getLink()); } } javac LLStringNode.java DemoReversePrint.java && java DemoReversePrint Printing in original order node # 1 node # 2 node # 3 node # 4 Printing in reverse order node # 4 node # 3 node # 2 node # 1 Printing forward recursively node # 1 node # 2 node # 3 node # 4