leetcode 21.合并两个有序链表
思路一,迭代法,借助哑节点来忽略边界问题。
实现代码如下
/** * 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* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode* dummyNode=new ListNode(); ListNode* temp=dummyNode; while(l1!=NULL&&l2!=NULL){ if(l1->val>=l2->val){ temp->next=l2; temp=l2; l2=l2->next; } else { temp->next=l1; temp=l1; l1=l1->next; } } if(l1==NULL)temp->next=l2; else temp->next=l1; return dummyNode->next; } };
思路二,递归法
学到了c++中尽量不要用NULL表示空指针(在C中允许空指针类型(void*)隐式转换,c++中不支持。故把NULL定义为整数类型,值为0),而是使用nullptr(当然啦,这次c++11引入的)。。。主要嘛是因为NULL用的好好的,力扣突然不给通过了,编译会报错且指出是NULL的问题。。
递归实现如下
/** * 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* mergeTwoLists(ListNode* l1, ListNode* l2) { if(l1==nullptr) return l2; if(l2==nullptr) return l1; if(l1->val>l2->val){ l2->next=mergeTwoLists(l1,l2->next); return l2; } else{ l1->next = mergeTwoLists(l1->next,l2); return l1; } } };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南