import java.util.Stack;
/**
* 输入一个链表的头结点,从尾到头反过来打印出每个结点的值.
*/
//首先定义链表结构
class LinkNode {
LinkNode next;
int node_value;
}
public class PrintListReversely {
/**
* 递归实现
* @param headNode 头结点
*/
private void recursivelyPrint(LinkNode headNode) {
if (headNode.next == null){
System.out.print(headNode.node_value + " ");
}else {
recursivelyPrint(headNode.next);
System.out.print(headNode.node_value + " ");
}
}
/**
* 用栈的思想来实现
* @param headNode 头结点
*/
private void reversePrint(LinkNode headNode) {
Stack<LinkNode> stack = new Stack<>();
while (headNode != null) {
stack.push(headNode);
headNode = headNode.next;
}
while (!stack.isEmpty()) {
System.out.print(stack.pop().node_value + " ");
}
System.out.println();
}
public static void main(String[] args) {
//输入的链表有多个结点
PrintListReversely plr = new PrintListReversely();
LinkNode node1 = new LinkNode();
LinkNode node2 = new LinkNode();
LinkNode node3 = new LinkNode();
LinkNode node4 = new LinkNode();
node1.node_value = 1;
node2.node_value = 2;
node3.node_value = 3;
node4.node_value = 0;
node1.next = node2;
node2.next = node3;
node3.next = node4;
plr.reversePrint(node1);
plr.recursivelyPrint(node1);
}
}
result:
0 3 2 1
0 3 2 1