剑指Offer-16-合并两个排序的链表

题目描述

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//非递归版
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
//归并排序:升序
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
ListNode* result= new ListNode(-1);
ListNode* current = result;
while(pHead1!=0&&pHead2!=0){
if(pHead1->val<pHead2->val){
current->next = pHead1;
pHead1=pHead1->next;
}else{
current->next = pHead2;
pHead2=pHead2->next;
}
current=current->next;
}
if(pHead1!=0)
current->next = pHead1;

if(pHead2!=0)
current->next = pHead2;

//返回的链表不包括头节点
return result->next;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//递归版
/*
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==0)return pHead2;
if(pHead2==0)return pHead1;

if(pHead1->val<pHead2->val){
pHead1->next = Merge(pHead1->next,pHead2);
return pHead1;
}else{
pHead2->next = Merge(pHead1,pHead2->next);
return pHead2;
}
}
};

----\(˙<>˙)/----赞赏一下吧~