题目描述
输入一个链表,从尾到头打印链表每个节点的值。
时间限制:1秒
空间限制:32768K
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
import java.util.List;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
}
}
思路一
我是这样想的,首先让指针指向链表的第一个节点,然后指针后移,把读到的数据放到一个ArrayList里,只不过此时放的顺序是正序,需要再声明一个ArrayList放倒序的数据。具体代码实现如下:
public class 链表打印 {
public static ArrayList<Integer> printListFromTailToHead(ListNode listNode){
List<Integer> list = new ArrayList<Integer>();
ListNode front = listNode;
while(front != null){
list.add(front.val);
front = front.next;
}
List<Integer> result = new ArrayList<Integer>();//放置从后往前的数据
for(int i = list.size() - 1; i >= 0; i--){
result.add(list.get(i));
}
return (ArrayList<Integer>) result;
}
public static void main(String[] args) {
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);
ListNode node4 = new ListNode(4);
ListNode node5 = new ListNode(5);
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
ArrayList<Integer> list = new ArrayList<>();
list = 链表打印.printListFromTailToHead(node1);
for(Integer it : list){
System.out.print(it + " ");
}
}
}
思路二
就是利用栈实现先进后出的思路,具体代码如下:
作者:codeBrother
链接:https://www.nowcoder.com/questionTerminal/d0267f7f55b3412ba93bd35cfa8e8035
来源:牛客网
Stack<Integer> temp = new Stack<>();
ArrayList<Integer> newList = new ArrayList<>();
ListNode t = listNode;
while( t != null ){
temp.push(t.val);
t = t.next;
}
while( !temp.empty() ){
newList.add(temp.pop());
}
return newList;