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

做网站手机验证收费吗长洲网站建设

做网站手机验证收费吗,长洲网站建设,淘宝客做网站怎样推广,杭州品牌网站建设https://leetcode.cn/problems/reverse-linked-list/description/ 一、题目分析 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。今天这道题目非常的言简意赅,就是给定一个链表将其反转后返回反转后的头节点。 二、示例分析 输…

https://leetcode.cn/problems/reverse-linked-list/description/

一、题目分析

        给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。今天这道题目非常的言简意赅,就是给定一个链表将其反转后返回反转后的头节点。

二、示例分析

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

 三、解题思路&代码实现

        方法一:双指针法

               我们可以定义一个前驱节点 pre 和一个当前节点 cur,初始时 pre = nullptrcur 指向头节点。每次遍历时,我们暂存 cur 的下一个节点,然后将 cur->next 指向 pre,完成当前节点的反转。接着,pre 和 cur 分别向后移动,直到 cur 为 nullptr。此时 pre 指向反转后的新头节点,整个链表完成逆序。

class Solution {
public:ListNode* reverseList(ListNode* head) {// 如果链表为空,直接返回nullptrif (head == nullptr)return nullptr;// pre指针用于记录当前节点的前一个节点,初始为nullptrListNode* pre = nullptr;// cur指针用于遍历链表,初始指向头节点ListNode* cur = head;// 遍历链表,直到cur为nullptr(即链表末尾)while (cur) {// 临时保存当前节点的下一个节点,防止断链后丢失ListNode* t = cur->next;// 将当前节点的next指针指向前一个节点,实现反转cur->next = pre;// 移动pre指针到当前节点,为下一次迭代做准备pre = cur;// 移动cur指针到之前保存的下一个节点,继续遍历cur = t;}// 循环结束后,pre指向原链表的最后一个节点,即反转后的新头节点return pre;}
};

图文说明:

        

        方法二:递归法

                递归法和双指针法大致思想一致,具体实现代码稍稍有些差异,需要着重搞清楚每次递归时需要传的参数分别是什么。

class Solution {
public:// 递归反转链表的辅助函数// pre: 已经反转部分的头节点(初始为nullptr)// cur: 当前待反转的节点(初始为原链表头节点)ListNode* reverse(ListNode* pre, ListNode* cur) {// 递归终止条件:当前节点为空,说明已处理完所有节点// 此时pre就是反转后的新头节点if (cur == nullptr)return pre;// 保存当前节点的下一个节点,防止断链ListNode* t = cur->next;// 反转当前节点的指向cur->next = pre;// 递归处理下一个节点:// 新的pre变为当前节点(已反转部分的头节点)// 新的cur变为之前保存的下一个节点return reverse(cur, t);}// 主函数:反转整个链表ListNode* reverseList(ListNode* head) { // 调用辅助函数// 这里等同于// ListNode* pre = nullptr;// ListNode* cur = head;return reverse(nullptr, head); }
};

关键点说明:

  1. 递归思想:将链表分为“已反转部分“与”未反转部分“,每次处理一个节点。
  2. 终止条件:当cur为空时,说明所有节点已经反转完毕。
  3. 指针操作:每次递归调用前保存cur->next节点,防止找不到后继节点。将当前节点指向前驱节点。
  4. 参数传递:pre始终指向已反转部分的头节点,cur始终指向待处理的下一个节点

时间复杂度上与方法一相同,但空间复杂度为O(n)。个人感觉递归其实还是挺难理解的,但是当你搞清楚递归之后,在代码量上,会比普通写法要简介很多。

方法三:头插法(不提供代码,请同学自行实现)

        这里主要讲述一下思想,感兴趣的小伙伴可以自己动手试一试。

        核心思想:遍历原链表,逐一拿下每一个节点,插入到一个新链表的头部,最后新链表就是逆序后的链表。

        关键步骤:

  1. 初始化一个虚拟头节点dummy),作为新链表的辅助节点。

  2. 遍历原链表,每次操作:

    • 保存当前节点的下一个节点(next = cur->next)。

    • 将当前节点插入到新链表头部(cur->next = dummy->next)。

    • 更新新链表的头(dummy->next = cur)。

    • 移动当前节点到原链表的下一个节点(cur = next)。

  3. 返回 dummy->next,即逆序后的新链表头节点。

在上述两种方法如果大家掌握了的话,这种方法实现起来应该是没有问题的。虽然不推荐,但是相比方法一、二也是有好处,比如直观更容易理解,无需递归不需要考虑栈溢出。但这种方法主要还是锻炼大家的算法思维。

四、题目总结

  • 双指针法:定义前驱指针 pre 初始为 nullptr,当前指针 cur 指向头节点。遍历链表,每次暂存 cur 的下一个节点 t,然后将 cur->next 指向 pre 实现当前节点反转,再移动 pre 和 cur 指针,直至 cur 为 nullptr,此时 pre 为反转后新头节点。时间复杂度 O (n),空间复杂度 O (1) 。
  • 递归法:将链表分为 “已反转部分” 和 “未反转部分”,通过递归处理节点。辅助函数 reverse 接收已反转部分头节点 pre(初始 nullptr)和当前待反转节点 cur(初始为头节点),保存 cur->next 防止断链,将 cur->next 指向 pre,再递归调用 reverse(cur, t) 处理下一个节点,终止条件为 cur 为空,此时 pre 是新头节点。时间复杂度 O (n) ,空间复杂度 O (n) 。
  • 头插法:遍历原链表,把每个节点逐一插入新链表头部,新链表即为反转后的链表。思想直观,利于锻炼算法思维,无需递归避免栈溢出问题。

对于每道题目,解法往往具有多样性。我们首先应掌握一种直观且基础的解法,这种解法可能较为“暴力”,但能帮助我们初步解决问题。在此基础上,再对代码进行优化,逐步探寻相对最优的解法。今天的分享就到这里,谢谢大家!!!荆轲刺秦!!!


文章转载自:

http://XlIj88JQ.jgLqn.cn
http://ccjgQ3Fg.jgLqn.cn
http://EeDR9vA9.jgLqn.cn
http://Of6LJb9d.jgLqn.cn
http://n1fz0Gdq.jgLqn.cn
http://Y48MT7fn.jgLqn.cn
http://GooFNfgH.jgLqn.cn
http://Bd1w7WEp.jgLqn.cn
http://QMeNIe82.jgLqn.cn
http://7CWm4guu.jgLqn.cn
http://pDSV4Ylh.jgLqn.cn
http://wNSSt8wu.jgLqn.cn
http://DMYKnuLj.jgLqn.cn
http://gTi77eNq.jgLqn.cn
http://QRC9mRwC.jgLqn.cn
http://LFmbDuKj.jgLqn.cn
http://CNp0li6P.jgLqn.cn
http://5E9pyUzg.jgLqn.cn
http://412oKwMn.jgLqn.cn
http://3cIwBJKr.jgLqn.cn
http://V3SwaKQJ.jgLqn.cn
http://hTB4jYAv.jgLqn.cn
http://eGL4oJQs.jgLqn.cn
http://bikOB7O7.jgLqn.cn
http://Pa6SHwgY.jgLqn.cn
http://2Ljfd1Eh.jgLqn.cn
http://4FZLw97o.jgLqn.cn
http://XHWrpkUY.jgLqn.cn
http://cwpY47L3.jgLqn.cn
http://vct6oIRT.jgLqn.cn
http://www.dtcms.com/wzjs/624624.html

相关文章:

  • 提供营销单页网站网站开发一个人可以完成吗
  • 网站建设如何设计数据库网站怎么备案在哪里
  • 用php写的网站wordpress怎么修改关键字
  • 中国城乡住房和城乡建设部网站首页网站建设与维护心得
  • 网站开发主要内容和要求找网站开发
  • 织梦统计网站访问量代码做网站需要学习多久
  • 延边网站开发局域网站开发
  • 网站网络营销诸城建设局网站
  • 中小型企业查询网站深圳app开发公司鑫酷
  • 找网站的方法哪个手机网站 有app
  • 12380网站建设的意见建议高校建设思政教育网站案例
  • 263云通信官方网站商城网站html模板
  • 溧水做网站wordpress迅雷下载
  • 如何在手机上做自己的网站wordpress 视差效果
  • 百度统计网站怎么进入wordpress修改界面
  • 如何让自己网站排名提高建官网公司
  • 东莞网站建设培训一级造价工程师报名时间2023年
  • 网站建设的软文素材wordpress搜索全站
  • 贷款类网站怎样做建个网站的电话
  • phpstudy做网站如何制作app的页面
  • 深圳网站制作必选祥奔科技网站页面分析作业
  • 漫画门户网站怎么做的百度seo公司整站优化
  • 富阳科技网站有哪些自己做网站要学前端和后端
  • 如何给网站做权重大连 网站
  • 组织建设一百年心得体会苏州搜索引擎优化
  • 企业网站怎么做排名diy网站建设源码
  • 网站建设课程设计报告浙江省建设厅建筑信息网官网
  • 网站建设个人网上银行济南seo整站外包
  • 站长统计app进入网址新版小猪腾讯企点聊天记录怎么恢复
  • 免费的编程自学网站百度商城