剑指offer——链表

简介: 剑指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);//关键(将最后一个数据放入)
  }
}


相关文章
|
5月前
《剑指offer》——合并两个排序的链表
《剑指offer》——合并两个排序的链表
|
2月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
42 5
|
2月前
|
Python
【Leetcode刷题Python】剑指 Offer 18. 删除链表的节点
Leetcode题目"剑指 Offer 18. 删除链表的节点"的Python解决方案,通过使用双指针法找到并删除链表中值为特定数值的节点,然后返回更新后的链表头节点。
33 4
|
5月前
|
Java C语言
剑指offer(牛客)——合并两个排序的链表
剑指offer(牛客)——合并两个排序的链表
32 1
|
5月前
|
存储 Java C语言
剑指offer(牛客)——从尾到头打印链表
剑指offer(牛客)——从尾到头打印链表
33 1
|
5月前
【一刷《剑指Offer》】面试题 17:合并两个排序的链表
【一刷《剑指Offer》】面试题 17:合并两个排序的链表
|
5月前
【一刷《剑指Offer》】面试题 16:反转链表
【一刷《剑指Offer》】面试题 16:反转链表
|
5月前
【一刷《剑指Offer》】面试题 15:链表中倒数第 k 个结点
【一刷《剑指Offer》】面试题 15:链表中倒数第 k 个结点
|
5月前
|
机器学习/深度学习
【一刷《剑指Offer》】面试题 13:在 O(1) 时间删除链表结点
【一刷《剑指Offer》】面试题 13:在 O(1) 时间删除链表结点
|
5月前
【一刷《剑指Offer》】面试题 5:从尾到头打印链表
【一刷《剑指Offer》】面试题 5:从尾到头打印链表