Day 3:从尾到头打印链表
时间:2022-07-24
本文章向大家介绍Day 3:从尾到头打印链表,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
剑指Offer_编程题——从尾到头打印链表
题目描述:
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
具体要求:
时间限制: C/C++ 1秒,其他语言2秒 空间限制: C/C++32M,其他语言64M
具体思路:
思路1: 1、先构造一个链表 2、定义一个栈,将链表元素放入到栈中 3、利用栈的先进后出,实现从尾到头返回 4、取出栈中元素放入到ArrayList,然后遍历 我们用java来实现这个思路:
import java.util.ArrayList;
public class Solution{
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<Integer>();
ArrayList<Integer> result = new ArrayList<Integer>();
ListNode temp = listNode;//这里需要构造一个ListNode类
while ( temp != null ) {//需要先判断链表时候为空
list.add( temp.val );//定义节点
temp = temp.next;
}
for ( int i = list.size()-1; i>=0; i-- ) {
result.add( list.get(i) );//遍历获得一个 ArrayList链表输出。
}
return result;
}
}
其效果如图所示:
思路2:让尾结点与头结点进行交换,然后让之前的数据插入到头指针之前 我们用python来实现这个思路
class Solution:
def printListFromTailToHead(self, listNode):
ret = []
pTmp = listNode
while pTmp:
ret.insert(0, pTmp.val)
pTmp = pTmp.next
return ret
其效果如图所示:
思路3:开辟一个新的list空间,将输入的链表list进行遍历,逆序并返回。
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
# Python 2.7
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
l = list()
while listNode:
l.append(listNode.val)
listNode = listNode.next
num = len(l)
ArrayList = []
while (num > 0):
ArrayList.append(l[num-1])
num -= 1
return ArrayList
# write code here
在思路3的基础上我们继续缩小代码量。
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
# Python 2.7
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
l = list()
while listNode:
l.append(listNode.val)
listNode = listNode.next
return l[::-1] #更简单的代码
# write code here
总结
本道题主要考察链表的相关知识,包括链表的逆序,还有栈和链表的相结合,达到链表的从尾到头输出。不过这里需要注意的是,在这道题中,listNode表示的是一个链表的节点,节点含有值和下一个节点指针,不能取len,更不能进行迭代。因此,我们在代码中用的是while()语句,而不是for()。同时,还是和之前两道题一样,任何一道编程题的代码、方法都不是唯一的,没有标准的答案,只是参考。思路不一样决定代码就不一样。因此我们要不断拓宽我们的思路,只有思路正确,才能写出正确的代码。继续加油,争取早日找到工作,Good Luck!!!
- Topshelf 支持Mono 扩展Topshelf.Linux
- 如何在 React Native 实现类微信小程序平台:WebView 调用原生组件
- 如何运营一个开源项目并取得较大影响力?
- ASP.NET Identity 2新增双重认证、帐号锁定、防伪印章功能并修复了一些bug
- Serverless 应用开发指南:基于 Serverless 与 Lambda 的微信公共平台
- Serverless 应用开发指南:serverless 的 hello, world
- 通过一组RESTful API暴露CQRS系统功能
- 通过使用结构化数据 JSON-LD,我为网站带来了更多的流量
- 使用 OWIN Self-Host ASP.NET Web API 2
- c#开源消息队列中间件EQueue 教程
- Serverless 框架 OpenWhisk 开发指南:使用 Node.js 编写 hello, world
- GOTO Berlin: Web API设计原则
- 使用 ServiceStack 构建跨平台 Web 服务
- 使用 OpenWhisk 自建 Serverless 服务
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法