题目:输入一个链表的头节点,从尾到头反过来打印每个节点的值。
分析:由于链表的创建是从头节点插入的,一般是从头打印的话结果与插入的值相反即,如果是从尾部反过来打印的每个节点的值的话,与插入的顺序相同。即第一个遍历的节点最后一个输出,最后一个遍历的节点第一个输出,我们可以用栈实现这种顺序。每经过一个节点的时候,把给节点放入栈中。当遍历完整个链表之后,再从栈顶开始逐个输出节点的值,此时输出的节点的顺序已经反转即:
public void PrintListReversely() {
Stack<LNode> stack = new Stack<LNode>();
LNode node = head.next;
while (node != null) {
stack.push(node);
node = node.next;
}
while (!stack.empty()) {
LNode p = stack.pop();
System.out.print(p.value + " ");
}
}
其实还可以用到递归,先递归输出它后面的节点,在输出改节点本身,这样链表的输出结果就反过来了。
public void PrintListReversely_Recursively(LNode node){
if(node!=null){
PrintListReversely_Recursively(node.next);
System.out.print(node.value+" ");
}
}
下面为代码的输出结果:
10 9 7 6 5 20 4 3 2 1
1 2 3 4 20 5 6 7 9 10
1 2 3 4 20 5 6 7 9 10
第一行为从头到尾遍历输出的结果。
第二行和第三行用的上面的两个方法输出的结果。