一 :代码的完整性
二:程序的鲁棒性
第一种方法用循环实现
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
//代码的鲁棒性
if(pHead1==NULL)
return pHead2;
else if(pHead2==NULL)
return pHead1;
ListNode * pHead3 = NULL;
//找到较小的节点作为头结点
if(pHead1->val >=pHead2->val)
{
pHead3 = pHead2;
pHead2 = pHead2->next;
}
else
{
pHead3 = pHead1;
pHead1 = pHead1->next;
}
//循环的终止条件
ListNode * p = pHead3;//创建一个工作及诶单
while(pHead1!=NULL&&pHead2!=NULL)
{
//里边就是简单的比较,移位,构造链表操作
if(pHead1->val <= pHead2->val)
{
p ->next =pHead1; //添加链表
pHead1 =pHead1 ->next; //链表后移
p =p ->next; //工作节点后移
}
else{
p ->next =pHead2; //添加链表
pHead2 =pHead2 ->next; //链表后移
p =p ->next; //工作节点后移
}
}
}
//保证添加余下的部分,所以这个判断要在循环之外
if(pHead1==NULL)
{
p->next =pHead2;
}
if(pHead2==NULL)
{
p->next =pHead1;
//必须加一个返回值 return pHead3; }};
第二种方法:递归调用。一般递归和循环可以相互转换,并且递归的代码更加简洁,但是递归要进行一些压栈等操作 更耗时间和内存!
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if(pHead1==NULL)
return pHead2;
else if(pHead2==NULL)
return pHead1;
ListNode* newhead=NULL;
if(pHead1->val<pHead2->val)
{
newhead=pHead1;
newhead->next=Merge(pHead1->next,pHead2);
}
else
{
newhead=pHead2;
newhead->next=Merge(pHead1,pHead2->next);
}
return newhead;
}
};
添加笔记
python代码实现:python语言类似c++
class Solution:
# 返回合并后列表
def Merge(self, pHead1, pHead2):
# write code here
res = head = ListNode(0)
while pHead1 and pHead2:
if pHead1.val < pHead2.val:
head.next = pHead1
pHead1 = pHead1.next
elif pHead1.val >= pHead2.val:
head.next = pHead2
pHead2 = pHead2.next
head = head.next
head.next = pHead1 or pHead2
return res.next