LeeCode刷题记录02

本文探讨了数组作为线性表的一种实现方式,其特点是数据元素在连续的内存空间中存储,便于快速访问。而链表虽然没有固定的内存位置,但通过指针实现节点间的连接,插入和删除操作更为高效。根据不同的操作需求,链表在需要频繁增删节点时更具优势。总结了数组与链表各自的特点和适用场景。
摘要由CSDN通过智能技术生成

数组的特征

第一个方面是 「线性表」。
线性表就是所有数据元素排成像一条线一样的结构,线性表上的数据元素都是相同类型,且每个数据元素最多只有前、后两个方向。数组就是一种线性表结构,此外,栈、队列、链表都是线性表结构。

第二个方面是 「连续的内存空间」。
线性表有两种存储结构:「顺序存储结构」和「链式存储结构」。其中,「顺序存储结构」是指占用的内存空间是连续的,相邻数据元素之间,物理内存上的存储位置也相邻。数组也是采用了顺序存储结构,并且存储的数据都是相同类型的。

综合这两个角度,数组就可以看做是:使用了「顺序存储结构」的「线性表」的一种实现方式。

与之对应的是链表的特征

1、链表可以没有表示整体的对象,只需要用节点就够了。表示一整条链表可以用“头节点”,也就是第一个节点来表示整条链。
2、总是可以用一个节点的next指针走到下一个节点。而且大部分情况下只有这一种方法——链表没有下标,也不能直接跳转到某一环。只能从一个节点出发,一步一步往后挪。
3、链表的删除操作很快,与链表长度无关。想象一下:你拿着一条项链的一个环,如何拆掉这个环?只需要拆开与它相邻的两个环,然后把相邻的两环接到一起即可。无论项链长短,拆除的操作没有区别。
4、链表的插入也很快,与链表长度无关。
5、链表的查找需要从头遍历,与数组类似,越长速度越慢。但由于没有下标可用,链表的遍历实际上比数组更慢一些。而且在插入、删除节点时,要先获取到必要的指针,才能删除或添加。
所以,理论上,在需要经常插入节点、删除节点,而且数据量比较大的场合,非常适合使用链表。

### LeetCode C++ 教程和练习目 #### 使用C++进行LeetCode的优势 选择C++作为主要编程语言在LeetCode具有显著优势。作为一种静态类型的编译型语言,C++提供了强大的性能优化能力以及丰富的标准库支持。对于希望深入理解计算机科学基础的同学来说,掌握C++有助于提高解决问的能力[^1]。 #### 推荐的策略 针对使用C++的情况,建议采取以下几种有效的方式: - **按标签分类学习**:依据LeetCode提供的不同主标签(如数组、字符串处理、动态规划等),集中精力攻克某一类问。这不仅能够帮助巩固特定知识点的理解,还能积累解决相似类型问的经验。 - **建立错本机制**:遇到难以解答或容易出错的问时将其记录下来形成个人专属的“错集”。定期重做这些难直到完全掌握为止,从而确保真正学会而不是简单记住答案。 - **注重算法思维培养而非语法细节**:虽然熟悉一门具体语言很重要,但在面对实际挑战时更重要的是运用合适的思维方式找到解决方案。因此,在日常训练过程中应更加关注如何构建有效的算法模型并实现它,而不是过分纠结于某些特殊的语法规则或是追求极简主义式的代码表达形式。 #### 实践案例分析 考虑这样一个场景——当准备参加技术面试前的一个月内计划完成至少50道高质量真演练。此时可以根据自身情况制定如下安排: | 周次 | 主 | 目数量 | |------|-------------------|---------| | 第一周 | 数组与字符串操作 | 10 | | 第二周 | 动态规划 | 12 | | 第三周 | 图论及其应用 | 8 | | 第四周 | 综合复习及模拟考试 | 20 | 在此期间每天保持固定时间投入练习,并严格按照上述提到的原则执行。每周结束后还要抽出专门的时间用来整理本周所学内容,特别是那些曾经困扰自己的地方需要重点回顾思考。 ```cpp // 示例代码片段展示了一个简单的链表反转函数 ListNode* reverseList(ListNode* head) { ListNode *prev = nullptr, *curr = head; while (curr != nullptr){ ListNode* nextTemp = curr->next; // Store the rest of list. curr->next = prev; // Reverse current node's pointer. prev = curr; // Move pointers forward one position. curr = nextTemp; } return prev; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值