从头到尾打印链表Java实现[剑指offer]
题目
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
第一想法可能是将链表反转,但是根据题意,应当是不能改变链表的结构的。
1通过栈的思想实现
1.1描述
链表的节点越靠后,就越先打印,符合先进后出的思想,利用ArrayList类中add方法可以指定index,将当前节点放在链表的最前面即可
1.2code
1 public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { 2 //1.通过栈的思想实现 3 ArrayList<Integer> list=new ArrayList<Integer>(); 4 if(listNode!=null){ 5 while(listNode!=null){ 6 list.add(0,listNode.val); 7 listNode=listNode.next; 8 } 9 } 10 return list; 11 }
2通过递归实现
2.1描述
递归的本质是一个栈结构,当访问到一个节点时,先不输出,先输出该节点的下一个节点,再输出自身
2.2code
1 public class Solution { 2 ArrayList<Integer> list=new ArrayList<Integer>(); 3 public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { 4 if(listNode!=null){ 5 printListFromTailToHead(listNode.next); 6 list.add(listNode.val); 7 } 8 return list; 9 } 10 }