思路一,迭代法,借助哑节点来忽略边界问题。
实现代码如下
/** * 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; } } };
原文:https://www.cnblogs.com/dongjl/p/13584052.html