package com.example.algorithm.printlist;
/**
* 链表.
*
* @author tengxiang
* @date 2020/5/15
* @since 1.0
*/
public class ListNode {
Integer data;
ListNode next;
public ListNode(Integer data, ListNode next) {
this.data = data;
this.next = next;
}
public Integer getData() {
return data;
}
public void setData(Integer data) {
this.data = data;
}
public ListNode getNext() {
return next;
}
public void setNext(ListNode next) {
this.next = next;
}
}
package com.example.algorithm.printlist;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
/**
* 第5题 从尾到头打印链表
* 输入一个链表,从尾到头打印链表每个节点的值.
*
* @author tengxiang
* @date 2020/5/15
* @since 1.0
*/
public class PrintListReversing5 {
/**
* 解法一:使用 栈实现
* @param listNode
* @return
*/
public List<Integer> printListReverse1(ListNode listNode){
List<Integer> list = new ArrayList<>();
Stack<ListNode> stack = new Stack<>();
while (listNode != null){
stack.push(listNode);
listNode = listNode.next;
}
while (!stack.isEmpty()){
list.add(stack.pop().data);
}
return list;
}
/**
* 解法二:使用递归实现
* @param listNode
* @return
*/
public List<Integer> printListReverse2(ListNode listNode){
List<Integer> list = new ArrayList<>();
if(listNode != null){
if(listNode.next != null){
list = printListReverse2(listNode.next);
}
list.add(listNode.data);
}
return list;
}
}