栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

合并两个有序链表(递归加迭代)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

合并两个有序链表(递归加迭代)

 1.递归,这个是官方大大的题解方法,说实话,本蒟蒻递归没怎么学明白;但是我把我能理解的都写上了注释,方便以后在回来看看,初学算法,没有老师教,只能自己一点点琢磨;

class Solution {

public:

    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {

      if(list1==nullptr)

       return list2;

       else if(list2==nullptr)

        return list1;//上面两种情况,大家都能想到

        else if(list1->valval)

        {

            list1->next=mergeTwoLists(list1->next,list2);

            return list1;//如果list1中的一个节点的val值较小,那么可以以list1为“主板”,把list2拆开套在list1里面

        }

        else {

            list2->next=mergeTwoLists(list1,list2->next);

            return list2;//相反就要往list2里面套了~~

        }

    }

};

2.迭代(就是“3=1+2”式)

class Solution {

public:

    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {

       ListNode* p=new ListNode(-1);//相当于创建了一个空链表,next为null

       //接下来就开始模拟加法运算

       ListNode* ans=p;//定义指针变量,并以他来模拟运算

       while(list1!=nullptr&&list2!=nullptr)//这个地方一定要是且,因为如果其中一个链表到了最后那么访问他的next就是非法的,一定要截到最先停下的一个链表

       {

           if(list1->val>list2->val)

           {ans->next=list2; list2=list2->next;}

           else

           {ans->next=list1;list1=list1->next;}

           ans=ans->next;

           

       }

       //注意这个时候的p为p->next,这时候list1或者list2中还剩余一个值,要再加在p的末尾

       ans->next=list1==nullptr?list2:list1;

       return p->next;//除去哑结点;

      

    }

};

                                                                                                                   记录当下,我的编程之路

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/949902.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号