剑指OFFER笔记_06_从尾到头打印链表_JAVA实现
题目:从尾到头打印链表
- 输入一个链表的头节点,从尾到头反过来打印出每个节点的值。
解题思路
- 链表相比数组来说,各有优劣。链表的空间利用率更高,而数组在查找时时间复杂度更低(O(1))。
- 在访问链表元素时,必须按照从前往后的固定顺序(单向链表),题目要求反向打印,所以可以使用递归的方式实现。
- 递归的方式代码简洁,但是对内存空间耗费较大,可以尝试用栈空间存储元素来代替递归方法。
- 每向后访问一个节点,都将该节点压入stack中,最后一一取出,由于stack具有先进后出的特点,结果自然就是反向逆序的了。
代码
ListNode结构代码
package q06;
public class ListNode {
int val;
ListNode next;
public ListNode(int x)
{
val = x;
}
}
函数主体部分代码
package q06;
import java.util.Stack;
public class Solution {
public static int[] reversePrint(ListNode head) {
Stack<ListNode> stack = new Stack<ListNode>();
ListNode temp = head;
while(temp != null)
{
stack.push(temp);
temp = temp.next;
}
int size = stack.size();
int[] result = new int[size];
for (int j = 0; j < result.length; j++) {
result[j] = stack.pop().val;
}
return result;
}
}
测试部分代码
package q06;
public class TestApp {
public static void main(String[] args) {
ListNode lnode = new ListNode(1);
lnode.next = new ListNode(2);
lnode.next.next = new ListNode(3);
lnode.next.next.next = new ListNode(4);
int[] result = Solution.reversePrint(lnode);
for (int i = 0; i < result.length; i++) {
System.out.print(result[i] + " ");
}
}
}
运行结果截图
LeetCode运行截图