面试题5. 从尾到头打印链表
题目描述
输入一个链表,从尾到头打印链表每个节点的值。
思路1:
借用一个辅助栈Stack,从头扫描链表,并把链表的值存到栈中。由于栈是后进先出,所以执行出栈操作时,链表尾部的节点先被出栈。
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
import java.util.Stack;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> result = new ArrayList<>();
if (listNode == null){
return result;
}
Stack<ListNode> stack = new Stack<>();
ListNode head = listNode;
while(head != null) {
stack.push(head);
head = head.next;
}
while(!stack.empty()) {
result.add(stack.pop().val);
}
return result;
}
}
思路2:
用递归来实现。递归本质上就是一个栈结构,可以替代辅助栈
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> result = new ArrayList<>();
return print(result, listNode);
}
private ArrayList<Integer> print(ArrayList<Integer> list, ListNode listNode) {
if (listNode != null) {
print(list, listNode.next);
list.add(listNode.val);
}
return list;
}
}