当前位置: 首页 > wzjs >正文

专业做电子的外贸网站360优化大师官网

专业做电子的外贸网站,360优化大师官网,擦彩网站开发,南昌电子商务网站建设LeetCode-链表-反转链表链表的中间结点 ✏️ 关于专栏:专栏用于记录 prepare for the coding test。 文章目录 LeetCode-链表-反转链表链表的中间结点📝 反转链表🎯题目描述🔍 输入输出示例🧩题目提示🧪AC …

image-20250520203051704

LeetCode-链表-反转链表+链表的中间结点

✏️ 关于专栏:专栏用于记录 prepare for the coding test


文章目录

  • LeetCode-链表-反转链表+链表的中间结点
    • 📝 反转链表
      • 🎯题目描述
      • 🔍 输入输出示例
      • 🧩题目提示
      • 🧪AC
    • 📝 链表的中间结点
      • 🎯题目描述
      • 🔍 输入输出示例
      • 🧩题目提示
      • 🧪AC
    • 🌟 总结
      • ✅ 反转链表
      • ✅ 链表的中间结点

📝 反转链表

🎯题目描述

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

🔗题目链接:反转链表

🔍 输入输出示例

示例 1:

img
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例 2:

img
输入:head = [1,2]
输出:[2,1]

示例 3:

输入:head = []
输出:[]

🧩题目提示

  • 链表中节点的数目范围是 [0, 5000]
  • -5000 <= Node.val <= 5000

🧪AC

简单理解:比如链表为 1→2→3。创建一个新的空链表,然后用头插法依次把节点 1,2,3 插到这个新链表的头部,就得到了链表 3→2→1,这正是反转后的链表。

image-20250521073407374 image-20250521074639304
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* reverseList(ListNode* head) {ListNode* pre = nullptr;ListNode* cur = head;while(cur){ListNode* nnxt = cur->next;cur->next = pre;pre = cur;cur = nnxt;}return pre;}
};

📝 链表的中间结点

🎯题目描述

给你单链表的头结点 head ,请你找出并返回链表的中间结点。

如果有两个中间结点,则返回第二个中间结点。

🔗题目链接:链表的中间结点

🔍 输入输出示例

示例 1:

img
输入:head = [1,2,3,4,5]
输出:[3,4,5]
解释:链表只有一个中间结点,值为 3 。

示例 2:

img
输入:head = [1,2,3,4,5,6]
输出:[4,5,6]
解释:该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。

🧩题目提示

  • 链表的结点数范围是 [1, 100]
  • 1 <= Node.val <= 100

🧪AC

可以利用「快慢指针」技巧来找到链表的中间节点。具体做法是定义两个指针:fastslow,其中 fast 每轮移动两步,slow 每轮移动一步。由于 fast 的移动速度始终是 slow 的两倍,当 fast 遍历完整个链表时,slow 恰好位于中间位置。

根据链表长度的不同,需区分以下两种情况:

  • 链表长度为奇数:当 fast 指向最后一个节点时,slow 正好指向链表的中间节点。
  • 链表长度为偶数:当 fast 越过尾节点(即指向 null)时,slow 此时指向的是两个中间节点中的第二个。

因此,我们可以在 fast 到达尾节点或越界时结束循环,并返回 slow 所指的位置作为中间节点。

image-20250521082408182

image-20250521082641153
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* middleNode(ListNode* head) {ListNode* fast = head;ListNode* slow = head;while(fast&&fast->next){fast = fast->next->next;slow = slow->next;}return slow;}
};

🌟 总结

✅ 反转链表

  • 运用 迭代法,通过 cur 遍历原链表,利用一个 pre 指针记录反转后的链表头。
  • 关键在于每次保存 cur->next,以防链表断裂,然后逐步“头插”到新的链表中。
  • 该方法时间复杂度为 O(n),空间复杂度为 O(1),高效稳定。

✅ 链表的中间结点

  • 使用 快慢指针法(Two Pointers) 快速定位中间结点。
  • fast 每次走两步,slow 每次走一步,fast 走完时,slow 恰好在中点。
  • 可统一处理奇偶长度链表:当 fastnullptrfast->next == nullptr 时停止,返回 slow 即可。

使用 快慢指针法(Two Pointers) 快速定位中间结点。

  • fast 每次走两步,slow 每次走一步,fast 走完时,slow 恰好在中点。
  • 可统一处理奇偶长度链表:当 fastnullptrfast->next == nullptr 时停止,返回 slow 即可。

将两者结合又将产生什么样的火花呢?参加LeetCode-234回文链表,下篇博客我们将一起探究这道题~

http://www.dtcms.com/wzjs/486425.html

相关文章:

  • 手机网站开发指南软文广告营销
  • php网站开发图文教程优化大师怎么提交作业
  • 公司网站推广怎么做成都网站建设方案服务
  • b2b网站需要解决哪些问题百度移动
  • wordpress 后台菜单seo查询
  • 大连自己的网站google 网站推广
  • 烟台网站建设.com东莞关键字排名优化
  • 用ps做网站网页店铺推广方式有哪些
  • 怎样宣传网站免费网络营销软件
  • 网站建设业务前景推广搜索引擎
  • 怎么建一个卖东西的网站nba最新资讯
  • 中国人民大学建设处网站主页同城推广
  • 租用阿里云做网站关键词有哪些关联词
  • 县级部门和乡镇不能建网站建设杭州百度快照优化排名推广
  • 山西省建设主管部门网站长春网站制作设计
  • 九江网站建设优化公司福州短视频seo服务
  • 苏州吴中区做网站广告营销推广方案
  • 南平高速建设有限公司网站怎么做推广比较成功
  • 好用的小程序推荐做seo需要哪些知识
  • 营销型网站建设的公司今天时政新闻热点是什么
  • 做网站商机网络工程师培训班要多少钱
  • 微信网页版是什么济南网站优化公司排名
  • 南宁工程建设网站有哪些国内新闻最新
  • 太原汽车网站建设宁波seo外包快速推广
  • 凡科网站能在百度做推广吗公司网站建设价格
  • 站长工具的使用seo综合查询运营广州seo公司哪个比较好
  • 网站维护的协议网站seo排名培训
  • 网页设计模板素材库河北网站seo地址
  • 专题网站建设策划搜索引擎调价平台哪个好
  • 效果好的网站建设网站建立