题目
输入一个链表的头结点,从尾到头反过来打印出每个结点的值。结点定义如下:
思路
结点遍历顺序只能从头到尾,但是输出的顺序却为从尾到头,是典型的“后进先出”问题,这就要联想到使用栈,从而也可以联想到使用递归。
代码
package cn.link;
public class LinkNode {
private int value;
private LinkNode nodeNext;
public LinkNode() {
}
public LinkNode(int value) {
super();
this.value = value;
}
public LinkNode getNodeNext() {
return nodeNext;
}
public void setNodeNext(LinkNode nodeNext) {
this.nodeNext = nodeNext;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
实现代码
package cn.link;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class PrintLink {
public ArrayList<Integer> printListFromTailToHead(LinkNode listNode) {
ArrayList<Integer> arrayList = new ArrayList<>();
Stack<Integer> stack = new Stack();
while (listNode.getNodeNext() != null) {
stack.push(listNode.getValue());
listNode = listNode.getNodeNext();
}
while (!stack.isEmpty()) {
arrayList.add(stack.pop());
}
return arrayList;
}
public static void main(String[] args) {
LinkNode headNode = new LinkNode();
headNode.setValue(1);
LinkNode headNode1 = new LinkNode();
headNode1.setValue(2);
LinkNode headNode2 = new LinkNode();
headNode2.setValue(3);
headNode1.setNodeNext(headNode2);
headNode.setNodeNext(headNode1);
PrintLink printLink = new PrintLink();
ArrayList list = printLink.printListFromTailToHead(headNode);
System.out.println(list);
}
}