考点:单链表、递归
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
1.非递归实现(迭代)
需要新建一个虚拟头节点
如果pHead1->val<pHead2->val,把pHead1给cur->next,pHead1走一步指向下一个结点,同时cur也走下一步下一个结点;
否则,pHead2同样操作。
直到pHead1或pHead2有一个为空,接在cur后面即可。
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
//建一个虚拟头节点
ListNode* head=new ListNode(0);
ListNode* cur=head;
while(pHead1 != NULL && pHead2 != NULL){
if(pHead1->val<pHead2->val){
cur->next=pHead1;
pHead1=pHead1->next;
}
else{
cur->next=pHead2;
pHead2=pHead2->next;
}
cur=cur->next;
}
if(pHead1 != NULL)
cur->next=pHead1;
if(pHead2 != NULL)
cur->next=pHead2;
return head->next;
}
2.递归实现(不需要创建新结点)
递归结束的条件:链表为空,返回pHead1或者pHead2
递归缩小递归空间:下一次递归的参数,如果pHead1的Val比pHead1的Val小,传pHead1->next,phead2不变;否则
pHead1不变,phead2->next
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if(pHead1 ==NULL) return pHead2;
if(pHead2==NULL) return pHead1;
ListNode* MergeHead=NULL;
if(pHead1->val<=pHead2->val){
MergeHead=pHead1;
MergeHead->next=Merge(pHead1->next,pHead2);
}
else
{
MergeHead=pHead2;
MergeHead->next=Merge(pHead1,pHead2->next);
}
return MergeHead;
}
python:
def Merge(self, pHead1, pHead2):
# write code here
MergeHead=None
if pHead1 == None:
return pHead2
if pHead2==None:
return pHead1
if(pHead1.val<=pHead2.val):
MergeHead=pHead1;
MergeHead.next=self.Merge(pHead1.next,pHead2)
else:
MergeHead=pHead2;
MergeHead.next=self.Merge(pHead1,pHead2.next)
return MergeHead
本文详细介绍了两种将两个单调递增链表合并成一个单调不减链表的方法:非递归实现(迭代)和递归实现。通过创建虚拟头节点进行迭代比较,或使用递归调用,实现了链表的有效合并。
172万+

被折叠的 条评论
为什么被折叠?



