/*
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
*/
/*
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 ;
if(pHead2 == NULL) return pHead1 ;
ListNode* pRet = NULL ;
if(pHead1->val <= pHead2->val) {
pRet = pHead1 ;
pRet->next = Merge(pHead1->next, pHead2) ;
}else {
pRet = pHead2 ;
pRet->next = Merge(pHead1, pHead2->next) ;
}
return pRet ;
*/
// 非递归版本
if(pHead1 == NULL) return pHead2 ;
if(pHead2 == NULL) return pHead1 ;
ListNode* pRet = NULL ;
ListNode* pCur = NULL ;
while(pHead1 != NULL && pHead2 != NULL) {
if(pHead1->val <= pHead2->val) {
if(pRet == NULL) {
pRet = pCur = pHead1 ;
pHead1 = pHead1->next ;
}else {
pCur->next = pHead1 ;
pCur = pHead1 ;
pHead1 = pHead1->next ;
}
}else {
if(pRet == NULL) {
pRet = pCur = pHead1 ;
pHead2 = pHead2->next ;
}else {
pCur->next = pHead2 ;
pCur = pHead2 ;
pHead2 = pHead2->next ;
}
}
}
if(pHead1 != NULL) pCur->next = pHead1 ;
else pCur->next = pHead2 ;
return pRet ;
}
};
合并两个排序的链表
最新推荐文章于 2022-11-01 15:05:03 发布