题解 | #从尾到头打印链表#
从尾到头打印链表
http://www.nowcoder.com/practice/d0267f7f55b3412ba93bd35cfa8e8035
方法一
思路
我们可以使用递归,在递归后面处理操作,即可以反向打印列表
代码
import java.util.ArrayList; public class Solution { ArrayList<Integer> list = new ArrayList<>(); public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { if (listNode == null){ return list; } printListFromTailToHead(listNode.next); list.add(listNode.val); return list; } }
方法二
思路
我们可以想顺序打印链表那样加入链表的值,再反转list即可
代码
import java.util.ArrayList; import java.util.*; public class Solution { ArrayList<Integer> list = new ArrayList<>(); public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { while (listNode != null){ list.add(listNode.val); listNode = listNode.next; } Collections.reverse(list); return list; } }
方法三
思路
反方向打印,我们很容易想到借助栈这个数据结构
代码
import java.util.ArrayList; public class Solution { ArrayList<Integer> list = new ArrayList<>(); public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { if (listNode == null){ return list; } Stack<ListNode> st; while (listNode != null){ st.push(listNode); listNode = listNode.next; } while (!st.isEmpty()){ list.add(st.pop().val); } return list; } }