ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

《数据结构与算法——递归与链表的基本概述与练习》

《数据结构与算法——递归与链表的基本概述与练习》 1. 链表的基本知识 (Linked List Basics)链表是一种物理存储单元上非连续、非顺序的存储结构数据元素的逻辑顺序是通过链表中的指针链接次序实现的。课件中重点讲解了两种经典的链表操作题目A. 反转链表 (Reverse Linked List)目标将单链表的头节点 head 进行反转并返回反转后的新头节点。常规解法迭代法定义两个指针cur 指向头结点pre 初始化为 null。暂存节点在改变指向之前必须用 tmp 指针保存 cur-next 节点防止链表断开。反转指向将 cur-next 指向 pre。移动指针pre 和 cur 向前移动pre cur, cur tmp。结束条件当 cur 指向 null 时循环结束此时 pre 指向新的头结点。B. 两两交换链表中的节点 (Swap Nodes in Pairs)目标在不改变节点值的情况下两两交换相邻的节点例如1-2-3-4 变为 2-1-4-3。核心步骤使用 cur 指针定位到待交换的前一个位置。步骤一cur 指向第二个节点即 cur-next-next。步骤二第二个节点指向第一个节点。步骤三第一个节点指向后续的节点即 3。更新 cur 指针位置继续处理下一对节点。2. 递归方法的基本思路 (Basic Ideas of Recursion)A. 递归的定义与分类递归是指在定义一个过程或函数时出现调用本过程或本函数的成分。直接递归函数直接调用自身如 fun(n) 调用 fun(n-1)。间接递归过程 p 调用 qq 又调用 p。尾递归递归调用语句是函数中的最后一条执行语句。B. 递归模型一个完整的递归算法通常包含两部分递归出口 (Base Case)确定递归何时结束即明确的终止条件防止无限循环。递归体 (Recursive Body)确定递归求解时的递推关系大问题如何拆解为小问题。C. 经典递归案例解析案例 逻辑描述 递归模型/公式阶乘 (n!) 求 n 的阶乘可以拆解为 n 乘以 (n-1) 的阶乘。 出口n1 时返回 1递归体fun(n) fun(n-1) * n斐波那契数列 又称“兔子数列”。从第3项开始每一项都等于前两项之和。 出口F(0)0, F(1)1递归体F(n) F(n-1) F(n-2)D. 递归的应用场景通常在以下三种情况下会考虑使用递归定义是递归的如数学中的阶乘、斐波那契数列。数据结构是递归的如链表链表节点包含指向下一个节点的指针结构自相似、树、图。问题的求解方法是递归的如回溯算法、分治法。练习题1206.反转列表224.两两交换链表中的节点
返回列表