题目
合并已经排序的2条链表
思路
递归策略:对于每一层递归,寻找最小的节点,然后嵌套递归
非递归:定义两个指针,初始化指向头结点,比较指针并移动节点指向
代码
非递归:
ListNode* mergeList(ListNode* List1,ListNode* List2)
{
if(!List1)
return List2;
if(!List2)
return List1;
ListNode* head=NULL;
ListNode* tail=NULL;
while(List1||List2){
if(List1->value<List2->value||!List2){//还有list2已经为空的情况
tail->next=List1;
tail=tail->next;
List1=List1->next;
}
else{
tail->next=List2;
tail=tail->next;
List2=List2->next;
}
if(!head)
head=tail;
}
return head;
}
递归:
ListNode* mergeList(ListNode* List1,ListNode* List2)
{
if(!List1)
return List2;
if(!List2)
return List1;
ListNode* head=NULL;
if(List1->value<List2->value){
head=List1;
head->next=mergeList(List1->next,List2);
}
else{
head=List2;
head->next=mergeList(List1,List2->next);
}
return head;
}