每日算法题 | 剑指offer 链表专题 (4) 从尾到头打印链表
2021-03-11 00:31
标签:微信 tree tco 学校 完整 工作 良好的 例子 整数 从尾到头打印链表 输入一个链表的头结点,从尾到头反过来打印出每个结点的值 要想从尾到头遍历链表,首先需要做的是倒转链表,再进行遍历。 题目要求,从尾到头遍历单链表。也就是第一个遍历到的节点要最后一个输出,最后一个遍历到的节点第一个输出。这就是典型的“后进先出”,由此可借助栈实现这种顺序。 递归在本质上就是一个栈结构。 要实现反过来输出链表,我们每访问到一个结点的时候,先递归输出它后面的结点,再输出该结点自身,这样链表的输出结果就反过来了。 但有个问题: c++的vector可以用insert()函数来向指定位置插入元素,arr.begin()表示在头部,arr.end()表示在尾部。例如: 注:面试季来了,不管是作为面试者还是以后作为面试官,了解算法这门程序员之间的沟通方式都是非常必要的。找过工作的朋友应该都听说过《剑指offer》,虽然书中只有六十多道题目,但是道道都是经典。 如果是单纯的面试需求,剑指offer的优先级肯定是在Leetcode之前,总的说它有三个优点: 它的缺点是: 剑指offer刷题交流群 扫码添加微信,一定要备注研究方向+地点+学校+昵称(如机器学习+上海+上交+汤姆) 每日算法题 | 剑指offer 链表专题 (4) 从尾到头打印链表 标签:微信 tree tco 学校 完整 工作 良好的 例子 整数 原文地址:https://blog.51cto.com/15054042/2564443题目
题目要求
解题思路
该题思路:创建一个空列表,用来存储链表中的值,最后将列表逆序输出
下面我们来举个例子:使用栈的情况:
每经过一个结点的时候,把该结点放到一个栈中。
当遍历完整个链表后,再从栈顶开始逐个输出结点的值,此时输出的结点的顺序已经反转过来了。使用递归:
当链表非常长的时候,就会导致函数调用的层级很深,从而有可能导致函数调用栈溢出。代码实现
Python :
# -*- 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
if not listNode:
return []
result = []
while listNode.next is not None:
# extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。
result.extend([listNode.val])
listNode = listNode.next
# 退出循环刚好在末尾节点,将末尾节点也添加进去
result.extend([listNode.val])
return result[::-1]
C++
//在头部插入10
arr.insert(arr.begin(),10);
//在尾部插入8
arr.insert(arr.end(),8);
具体实现:
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector
JAVA
public class Solution {
public ArrayList
后记
算法题主要分成数据结构和具体算法部分,简单归类如下。基本每道题都很精彩,所以这里就不一一洗写了,题解可以看看我的代码仓库或者讨论区的内容。数据结构类题目
▲长按加群
文章标题:每日算法题 | 剑指offer 链表专题 (4) 从尾到头打印链表
文章链接:http://soscw.com/index.php/essay/62971.html