从头到尾打印链表
题目
输入一个链表的头结点,从尾到头反过来打印出每个结点的值。节点定义如下:
class ListNode {
int val;
ListNode next;
ListNode(int val) {
this.val = val;
}
}
思路
输入一个链表的头结点,从尾到头反过来打印出每个结点的值。对于“后进先出”问题,要快速想到”栈“,也同时想到递归。
结点遍历顺序只能从头到尾,但是输出的顺序却为从尾到头,是典型的“后进先出”问题,这就要联想到使用栈,从而也可以联想到使用递归。
测试用例
- 功能测试(单个节点链表,多个节点链表)
- 特殊输入测试(链表为空)
Java代码
1 | import java.util.Stack; |
测试代码:
1 | public class PrintListInReversedOrder { |
递归的其他写法
递归部分代码也可以像下面这样写,注意体会不同的递归写法
1 | public void printListReversingly_Recursively(Node node) { |
牛客网提交代码
采用的递归,非常简洁,很值得学习。
1 | /** |
总结
- 对于“后进先出”问题,要快速想到”栈“,也同时想到递归。
- 采用递归时,返回的函数值不一定要有赋值操作,只要实现了遍历的作用就可以了,牛客网的代码可以多多学习。