c++ 链表_Thinking--从尾到头打印链表
Thinking系列,旨在利用10分钟的时间传达一种可落地的编程思想。使用 typescript 生成链表
interface node<T> {next: node<T> | nullelement: T
}class LinkedNode<T> implements node<T> {element: Tnext: node<T> | null = nullconstructor(element: T, next: node<T> | null = null) {this.element = elementthis.next = next}
}class LinkedList<T> {length: number = 0head: node<T> | null = nullappend(element: node<T>) {let node: node<T> = elementif (this.head === null) {this.head = node} else {// 不改变head指针let current = this.headwhile (current.next) {current = current.next}current.next = node}this.length++}
}
需求: 如,链表信息{"length":3,"head":{"next":{"next":{"next":null,"element":"c"},"element":"b"},"element":"a"}}
,链表倒序输出c b a
var testLinkedList = new LinkedList<string>()
testLinkedList.append(new LinkedNode<string>('a'))
testLinkedList.append(new LinkedNode<string>('b'))
testLinkedList.append(new LinkedNode<string>('c'))
常规思路
循环保存,然后倒序输出
function printLinkedListReversing (head: node<string>): void {let result: string[] = []while(head !== null) {result.push(head.element)head = head.next}console.log(result.reverse())
}
延伸
倒叙输出(先进后出 FILO),典型的栈。 依靠递归(递归本质上是一个栈结构)
function printLinkedListReversing_recursion(head: node<string>): void{if (head !== null) {if (head.next != null) {printLinkedListReversing_recursion(head.next)}console.log(head.element)}
}
需要注意的是,当链表过长时,会导致函数调用的层级过深,可能导致调用栈溢出。
扩展: 数组存储中间状态
function printLinkedListReversing(head: node<string>, result: Array<string> = []): Array<string> {if (head !== null) {if (head.next != null) {printLinkedListReversing(head.next, result)}console.log(head.element)result.push(head.element)}return result
}console.log(printLinkedListReversing(testLinkedList.head, [])) // [ 'c', 'b', 'a' ]
物理结构:
- 顺序存储结构:数组
- 链式存储结构:链表
逻辑结构:
- 线性结构:顺序表、栈、队列
- 非线性结构:树、图
数组:读操作多、写操作少的场景。 非常高效的随机访问能力;插入和删除元素效率不高。 链表:灵活地进行插入和删除操作。
欢迎关注 「 Super 前端 」微信公众号
版权声明: 本文原创自我的博客:李刚的学习专栏
c++ 链表_Thinking--从尾到头打印链表相关推荐
- 牛客网(剑指offer) 第三题 输入一个链表,从尾到头打印链表每个节点的值。
//输入一个链表,从尾到头打印链表每个节点的值. //解题思路:遍历每一个节点 并将节点放入数组中 最后翻转数组 function printListFromTailToHead($head) {$ ...
- 《剑指offer》刷题——【链表】从尾到头打印链表
<剑指offer>刷题--[链表]-<从尾到头打印链表> 问题分析: 递归实现: 1. 无返回值 2. 有返回值(ArrayList) 问题分析: 从头到尾打印链表比较简单,那 ...
- 剑指offer66题 -- 输入一个链表,从尾到头打印链表每个节点的值
class Solution { public: vector<int> printListFromTailToHead(ListNode* head) { /* //变量定义 ...
- JAVA实现从尾到头打印链表(《剑指offer》)
最近在刷<剑指offer>里的编程题,但是网上关于<剑指offer>的解答多半是C或者C++的,而且官方(作者)也是在用C++进行讲解,这里自己用java写了一些题目的解答代码 ...
- 剑指Offer - 九度1511 - 从尾到头打印链表
剑指Offer - 九度1511 - 从尾到头打印链表2013-11-29 21:08 题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包含一组测试样例. 每一组测试案 ...
- 从尾到头打印链表---剑指Offer
从尾到头打印链表 输入一个链表,从尾到头打印链表每个节点的值. 解题思路: 1. 将带有头结点的链表顺序的从头到尾加入到ArrayList集合 2. 使用Collections工具类将ArrayLis ...
- 剑指Offer 从尾到头打印链表
题目描述 输入一个链表,从尾到头打印链表每个节点的值. 输入描述: 输入为链表的表头 输出描述: 输出为需要打印的"新链表"的表头 思路: 用容器vector,递归到最后一个元素, ...
- 剑指offer面试题[5]-从尾到头打印链表
目描述 输入一个链表,从尾到头打印链表每个节点的值. /** * struct ListNode { * int val; * struct ListNode *next ...
- 剑指offer:面试题06. 从尾到头打印链表
题目:从尾到头打印链表 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表长度 & ...
- 【剑指Offer专题】链表系列:从尾到头打印链表、反转链表、回文链表、合并两个排序的链表(C++和Python实现)...
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 剑指Offer(三):从尾到头打印链表 输入一个链表的头节点,从尾到头反过来返回每 ...
最新文章
- 【小项目关键技术四】液晶显示屏
- JavaWeb课程复习资料(八)——添加功能
- 优化Java序列化– Java,XML,JSON,Kryo,POF
- 漫画:为什么程序员没有女友?
- 2020-django目录
- hibernate 调用oracle存储过程,hibernate调用oracle存储过程||函数
- [2013.11.13][cpp]检测机器大端或者小端
- Error: EBUSY: resource busy or locked, lstat ‘D:\DumpStack.log.---基于Vue的uniapp手机端_前端UI_uview工作笔记004
- 禁止百度云盘p2p后台上传
- 盘点:2012中国互联网大会十大亮点
- 什么是虚短、虚断、虚地
- 软件架构-事件驱动架构
- Css3之画菱形和平行四边形
- 微信如何添加企业微信信息服务器地址,企业微信和微信消息怎么互通_企业微信和微信消息互通操作流程一览...
- 云栖社区2017中国开发者调查报告
- 八大基本数据类型之基本类型与包装类型的区别
- C# URL编码转换 URL转码 UrlDecode UrlEncode
- java国际象棋棋牌_用java画国际象棋棋盘
- jquery中的ready方法和window的onload方法的区别
- 麦语言和python区别_GitHub - bankwang/funcat: Funcat 将同花顺、通达信、文华财经麦语言等的公式写法移植到了 Python 中。...