首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >剑指Offer第3题详解(附Java、Python源码)

剑指Offer第3题详解(附Java、Python源码)

作者头像
bboy枫亭
发布于 2020-09-22 03:07:16
发布于 2020-09-22 03:07:16
34400
代码可运行
举报
文章被收录于专栏:csdn_blogcsdn_blog
运行总次数:0
代码可运行

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

1. Java实现

1.1 使用add方法首位插入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
*    public class ListNode {
*        int val;
*        ListNode next = null;
*
*        ListNode(int val) {
*            this.val = val;
*        }
*    }
*
*/
import java.util.ArrayList;
public class Solution {
    ArrayList<Integer> list=new ArrayList<>();
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        while (listNode!=null) {
            list.add(0,listNode.val);
            listNode=listNode.next;
        }
        return list;
    }
}

1.2 递归

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
*    public class ListNode {
*        int val;
*        ListNode next = null;
*
*        ListNode(int val) {
*            this.val = val;
*        }
*    }
*
*/
import java.util.ArrayList;
public class Solution {
    ArrayList<Integer> list=new ArrayList<>();
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        if (listNode!=null) {
            printListFromTailToHead(listNode.next);
            list.add(listNode.val);
        }
        return list;
    }
}

2. Python实现

2.1 使用栈

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def printListFromTailToHead(self, listNode):
        # write code here
        stack = []
        result = []
        while listNode:
            stack.append(listNode.val)
            listNode = listNode.next
        while stack:
            result.append(stack.pop())
        return result

2.2 使用递归

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def printListFromTailToHead(self, listNode):
        # write code here
        list = []
        def fun(Node):
            if Node:
                fun(Node.next)
                list.append(Node.val)
        fun(listNode)
        return list

2.3 从头到尾遍历后逆序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def printListFromTailToHead(self, listNode):
        # write code here
        list = []
        while listNode:
            list.append(listNode.val)
            listNode=listNode.next
        return list[::-1]

2.4 栈+递归

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def __init__(self):
        self.list=[]
    def printListFromTailToHead(self, listNode):
        if listNode:
            if listNode.next:
                self.printListFromTailToHead(listNode.next)
            self.list.append(listNode.val)
        return self.list
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/08/19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
图解剑指 offer 第三题: 从尾到头打印链表
初看题目意思就是输出的时候链表尾部的元素放在前面,链表头部的元素放在后面。这不就是 先进后出,后进先出 么。
五分钟学算法
2019/03/14
7940
图解剑指 offer 第三题: 从尾到头打印链表
python-剑指offer1-5
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
西西嘛呦
2020/08/26
3390
剑指offer【03~09】
注意:这道题如果数据范围变为 [1, n],那么可以将其转化为使用快慢指针判断有环问题,和 Leetcode 【Two Pointers】287. Find the Duplicate Number 一模一样了。
echobingo
2019/12/20
4120
【剑指Offer】1-10题
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
致Great
2019/03/16
6660
剑指Offer(三)--从尾到头打印链表
先把元素里面的元素从头到尾遍历取出放在栈里面,然后再把栈的元素去出来放在ArraList里面。主要利用了栈的先进后出的规则,这样就可以实现倒序的功能。show you the code:
秦怀杂货店
2022/02/15
2030
剑指Offer(三)--从尾到头打印链表
【剑指Offer】6. 从尾到头打印链表
要逆序打印链表 1->2->3(3,2,1),可以先逆序打印链表 2->3(3,2),最后再打印第一个节点 1。而链表 2->3 可以看成一个新的链表,要逆序打印该链表可以继续使用求解函数,也就是在求解函数中调用自己,这就是递归函数。
瑞新
2020/12/07
2840
《剑指offer》05: 从尾到头打印链表
遍历链表,每个链表结点值 push 进栈,最后将栈中元素依次 pop 到 list 中。
程序员小浩
2020/08/10
2970
剑指offer--从尾到头打印链表
输入一个链表,从尾到头打印链表每个节点的值。 ---- 思路: 遍历整个链表,依次入栈。遍历结束后,再一次出栈即可。 ---- Java代码如下: import java.util.ArrayList; import java.util.Stack; class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val;
AI那点小事
2020/04/18
1840
剑指Offer-从尾到头打印链表
package LinkedList; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Deque; /** * 输入一个链表,从尾到头打印链表每个节点的值。 */ public class Solution10 { /** * 从尾到头打印,很明显先进后出,利用栈,栈先进后出 * * @param listNode * @return
武培轩
2018/04/18
6340
牛客刷题——剑指offer
 💟💟前言 🥇作者简介:友友们大家好,我是你们的小王同学😗😗 🥈个人主页:小王同学🚗 🥉 系列专栏:牛客刷题专栏📖 📑 推荐一款非常火的面试、刷题神器👉 牛客网 今天给大家带来的刷题系列是:剑指offer 剑指offer 刷题专属链接👉剑指offer  里面有非常多的题库 跟面经知识 真的非常良心了!! 今天给大家带来的是 刷题 剑指offer里的题目 剑指offer里的题目绝大部分都是面试常考题目  所以我们要熟练地刷上几遍 JZ6 从尾到头打印链表🏀 从尾到头打印链表 题目描述🥌:
王同学要努力
2022/12/21
4270
牛客刷题——剑指offer
【剑指Offer专题】链表系列:从尾到头打印链表、反转链表、回文链表、合并两个排序的链表(C++和Python实现)
通常,这种情况下,我们不希望修改原链表的结构。返回一个反序的链表,这就是经典的“后进先出”,我们可以使用栈实现这种顺序。每经过一个结点的时候,把该结点放到一个栈中。当遍历完整个链表后,再从栈顶开始逐个输出结点的值,给一个新的链表结构,这样链表就实现了反转。
深度学习技术前沿公众号博主
2020/05/18
9520
《剑指offer》专题—算法训练 day02
文章目录 《剑指offer》专题—算法训练 day02 一、替换空格 思路 二、从尾到头打印链表 思路一 思路二 思路三 三、重建二叉树 思路 四、斐波那契数列 思路一 思路二 未完待续...
RAIN7
2021/09/30
2220
《剑指offer》专题—算法训练 day02
剑指Offer 1-22题(Python版)
题目: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
小一
2019/08/14
4700
牛客网-从头到尾打印链表
题目描述 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 解题1 使用栈 解题2 /** * public class ListNode { * int val; * ListNode next = null; * * ListNode(int val) { * this.val = val; * } * } * */ import java.util.ArrayList; import java.ut
手撕代码八百里
2020/07/28
2680
剑指offer No.3 从尾到头打印链表
题目描述 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 import java.util.ArrayList; import java.util.Stack; public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { Stack s=new Stack(); if(listNode==null){
week
2020/03/17
3310
python-剑指offer11-15
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
西西嘛呦
2020/08/26
2500
剑指offer(01-03)题解
思路解析 重点是切记不要把这个数组当成是一直递增的,他只是保证左到右递增,上到下递增,并没有保证整体
萌萌哒的瓤瓤
2020/08/26
2850
剑指offer(01-03)题解
leetcode:从头到尾打印链表
在编写代码中,我们临时储存的数据是在内存当中,内存就像一块块并列排序的小方盒,每个小方盒都有自己地址,我们储存的数据就在这样一个个小方盒当中。
用户9955628
2022/08/12
2560
剑指offer【20~29】
方法1:使用正则表达式,格式为 import re,re.match(r"^...$", s) ,其中 ^ 表示匹配 s 的开始,$ 表示匹配 s 的结尾,... 就是自己写的表达式。匹配成功会返回一个对象,则为 True,否则为 False。
echobingo
2019/12/20
3580
《剑指Offer 1.二维数组中的查找》2019-03-25
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
梅花
2020/09/28
2700
相关推荐
图解剑指 offer 第三题: 从尾到头打印链表
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档