码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 从尾到头打印链表 ,合并两个排序的链表、反转链表 :迭代法


     

    目录

     

    合并两个排序的链表:

    关于迭代法的理解: 

    每一层函数功能:

    迭代的两个问题:

    往里走时:

    出来时:

     从尾到头打印链表 返回数组;

    每一层函数功能:

    迭代的两个问题:

    往里走时:

    出来时:

    反转链表 

    每一层函数功能:

    迭代的两个问题:

    往里走时:

    出来时:


    合并两个排序的链表:

    关于迭代法的理解: 

    每一层函数功能:

    两个结点比较,返回较小结点

    迭代的两个问题:

    往里走时:

            下一步的递归区间:因为是从小到大排序,所以当p1<= p2时,下一步应该比较p1->next和p2;

    出来时:

            返回值是什么:最后出来时,最后一层肯定是直接返回的头节点,每一层也应该返回头结点,从小到达排序,因此当p1<= p2时,返回较小的头节点p1;

            怎么处理:因为是从小到大,当p1<= p2时,因此出来时的头链接是p1->next = 返回值;

    1. /*
    2. struct ListNode {
    3. int val;
    4. struct ListNode *next;
    5. ListNode(int x) :
    6. val(x), next(NULL) {
    7. }
    8. };*/
    9. class Solution {
    10. public:
    11. ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {
    12. //终止条件;
    13. if(!pHead1) return pHead2;
    14. if(!pHead2) return pHead1;
    15. //
    16. //函数功能:两个结点比较,返回较小结点
    17. //开始迭代的两个问题:
    18. //往里走时:下一步的递归区间:因为是从小到大排序,所以当p1<= p2时,下一步比较p1->next和p2;
    19. //出来时:返回值是什么,怎么处理;最后出来时,最后一层肯定是直接返回的头节点,因为是从小到大,因此出来时首先建立连接p1->p2;
    20. if(pHead1->val <= pHead2->val){
    21. pHead1->next = Merge(pHead1->next, pHead2);
    22. return pHead1;
    23. }else{
    24. pHead2->next = Merge(pHead1, pHead2->next);
    25. return pHead2;
    26. }
    27. }
    28. };

     从尾到头打印链表 返回数组;

    每一层函数功能:

    先走到底,返回时将结点值放入容器;

    迭代的两个问题:

    往里走时:

            终止条件:head = NULL;

    出来时:

            返回值是什么:使用& ,因此不需要返回值;

            怎么处理:将结点值依次放入vector容器中;

    1. /**
    2. * struct ListNode {
    3. * int val;
    4. * struct ListNode *next;
    5. * ListNode(int x) :
    6. * val(x), next(NULL) {
    7. * }
    8. * };
    9. */
    10. class Solution {
    11. public:
    12. //这里使用&来传递,
    13. void reverseList(ListNode* head, vector<int>& v) {
    14. if(head != NULL){
    15. reverseList(head->next, v);
    16. v.push_back(head->val);
    17. }
    18. }
    19. vector<int> printListFromTailToHead(ListNode* head) {
    20. vector<int> v;
    21. reverseList(head, v);
    22. return v;
    23. }
    24. };

    反转链表 

    每一层函数功能:

    先走到底,返回时将结点值放入容器;

    迭代的两个问题:

    往里走时:

            终止条件:最后一个结点;即head.next = NULL;

    出来时:

            返回值是什么:最后一个结点,存着当头节点;

            怎么处理:反转指向,之后p指针会自动往左跳;

    1. /*
    2. struct ListNode {
    3. int val;
    4. struct ListNode *next;
    5. ListNode(int x) :
    6. val(x), next(NULL) {
    7. }
    8. };*/
    9. class Solution {
    10. public:
    11. ListNode* ReverseList(ListNode* pHead) {
    12. //终止条件;
    13. if (pHead == NULL || pHead->next == NULL)
    14. return pHead;
    15. //
    16. ListNode* ret = ReverseList(pHead->next);
    17. pHead->next->next = pHead;
    18. pHead->next = NULL;
    19. return ret;
    20. }
    21. };
  • 相关阅读:
    Vue rules校验规则详解
    vue将日期数据转换成字符串
    ubuntu18.04安装pangolin库,图文详解
    linux yum install 失败报错:Transaction check error
    使用卷积神经网络训练手写数字识别模型(CNN)
    C++ 随机数、srand((unsigned)time(NULL)) 详解
    C/S架构学习之TCP服务器
    昇思MindSpore行业与技术论坛暨昇思生态城市行•长沙站重磅开启:共促AI根技术发展
    现场感言讲稿的标准模板
    常用算法记录整理
  • 原文地址:https://blog.csdn.net/weixin_46432495/article/details/127595660
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号