此文章是vip文章,如何查看?  

1,点击链接获取密钥 http://nicethemes.cn/product/view29882.html

2,在下方输入文章查看密钥即可立即查看当前vip文章


剑指offer——链表

  • 时间:
  • 浏览:
  • 来源:互联网

题目3:输入一个链表,按链表从尾到头的顺序返回一个ArrayList 题目

解题思路:

用stack方式是比较容易想到的,递归的方式比较难以想到

递归的关键,先向下递归再执行本次操作,这样才会形成反序操作序列(反序操作序列)

/**
*    public class ListNode {
*        int val;
*        ListNode next = null;
*
*        ListNode(int val) {
*            this.val = val;
*        }
*    }
*
*/

//1.ArrayList实现
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
  ArrayList<Integer> list=new ArrayList<Integer>();
  while(listNode!=null){
    list.add(0,listNode.val);
    listNode=listNode.next;
  }
  return list;
}
//2.stack
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
  ArrayList<Integer> list=new ArrayList<Integer>();
  Stack<Integer> stack=new Stack<Integer>();
  while(listNode!=null){
    stack.push(listNode.val);
    listNode=listNode.next;
  }
  while(!stack.empty()){
    list.add(stack.pop());
  }
  return list;
}
//3.递归(递归的关键,先向下递归再执行本次操作,这样才会形成反序操作序列)
ArrayList<Integer> list=new ArrayList<Integer>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
  ArrayList<Integer> list=new ArrayList<Integer>();
  while(listNode!=null){//递归结束
    printListFromTailToHead(listNode.next);
    list.add(listNode.val);//关键(将最后一个数据放入)
  }
}

 

本文链接http://element-ui.cn/news/show-342165.aspx