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--从尾到头打印链表相关推荐

  1. 牛客网(剑指offer) 第三题 输入一个链表,从尾到头打印链表每个节点的值。

    //输入一个链表,从尾到头打印链表每个节点的值. //解题思路:遍历每一个节点  并将节点放入数组中 最后翻转数组 function printListFromTailToHead($head) {$ ...

  2. 《剑指offer》刷题——【链表】从尾到头打印链表

    <剑指offer>刷题--[链表]-<从尾到头打印链表> 问题分析: 递归实现: 1. 无返回值 2. 有返回值(ArrayList) 问题分析: 从头到尾打印链表比较简单,那 ...

  3. 剑指offer66题 -- 输入一个链表,从尾到头打印链表每个节点的值

    class Solution { public: vector<int> printListFromTailToHead(ListNode* head) {   /*     //变量定义 ...

  4. JAVA实现从尾到头打印链表(《剑指offer》)

    最近在刷<剑指offer>里的编程题,但是网上关于<剑指offer>的解答多半是C或者C++的,而且官方(作者)也是在用C++进行讲解,这里自己用java写了一些题目的解答代码 ...

  5. 剑指Offer - 九度1511 - 从尾到头打印链表

    剑指Offer - 九度1511 - 从尾到头打印链表2013-11-29 21:08 题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包含一组测试样例. 每一组测试案 ...

  6. 从尾到头打印链表---剑指Offer

    从尾到头打印链表 输入一个链表,从尾到头打印链表每个节点的值. 解题思路: 1. 将带有头结点的链表顺序的从头到尾加入到ArrayList集合 2. 使用Collections工具类将ArrayLis ...

  7. 剑指Offer 从尾到头打印链表

    题目描述 输入一个链表,从尾到头打印链表每个节点的值. 输入描述: 输入为链表的表头 输出描述: 输出为需要打印的"新链表"的表头 思路: 用容器vector,递归到最后一个元素, ...

  8. 剑指offer面试题[5]-从尾到头打印链表

    目描述 输入一个链表,从尾到头打印链表每个节点的值. /** *  struct ListNode { *        int val; *        struct ListNode *next ...

  9. 剑指offer:面试题06. 从尾到头打印链表

    题目:从尾到头打印链表 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表长度 & ...

  10. 【剑指Offer专题】链表系列:从尾到头打印链表、反转链表、回文链表、合并两个排序的链表(C++和Python实现)...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 剑指Offer(三):从尾到头打印链表 输入一个链表的头节点,从尾到头反过来返回每 ...

最新文章

  1. 【小项目关键技术四】液晶显示屏
  2. JavaWeb课程复习资料(八)——添加功能
  3. 优化Java序列化– Java,XML,JSON,Kryo,POF
  4. 漫画:为什么程序员没有女友?
  5. 2020-django目录
  6. hibernate 调用oracle存储过程,hibernate调用oracle存储过程||函数
  7. [2013.11.13][cpp]检测机器大端或者小端
  8. Error: EBUSY: resource busy or locked, lstat ‘D:\DumpStack.log.---基于Vue的uniapp手机端_前端UI_uview工作笔记004
  9. 禁止百度云盘p2p后台上传
  10. 盘点:2012中国互联网大会十大亮点
  11. 什么是虚短、虚断、虚地
  12. 软件架构-事件驱动架构
  13. Css3之画菱形和平行四边形
  14. 微信如何添加企业微信信息服务器地址,企业微信和微信消息怎么互通_企业微信和微信消息互通操作流程一览...
  15. 云栖社区2017中国开发者调查报告
  16. 八大基本数据类型之基本类型与包装类型的区别
  17. C# URL编码转换 URL转码 UrlDecode UrlEncode
  18. java国际象棋棋牌_用java画国际象棋棋盘
  19. jquery中的ready方法和window的onload方法的区别
  20. 麦语言和python区别_GitHub - bankwang/funcat: Funcat 将同花顺、通达信、文华财经麦语言等的公式写法移植到了 Python 中。...

热门文章

  1. HDU 4389——X mod f(x)(数位DP)
  2. 关于crossvalind函数(转)
  3. Visual Studio 常用快捷键(一)
  4. 网站暴库原理与方法剖析
  5. mysql 字符串的hash函数_【转载】字符串Hash函数比较
  6. 阿里巴巴Java开发手册v1.2.0版
  7. smartconfig配置模式
  8. jstring转换到C语言所用的char
  9. IOS控件圆角、描边
  10. android之camera