题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
//第一种想法,全部取出来,然后排序放回,不可行
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
/*
ListNode* p = pHead1;
ListNode* q;
int temp;
if(pHead1 == NULL)
return pHead2;
if(pHead2 == NULL)
return pHead1;
while(p->next != NULL) {
p = p->next;
}
p->next = pHead2;
for(p = pHead1; p != NULL; p = p->next) {
for(q = p->next; q != NULL; q = q->next) {
if(p->val > q->val) {
temp = p->val;
p->val = q->val;
q->val = temp;
}
}
}
return pHead1;
*/
ListNode* result = NULL;
ListNode* current;
if(pHead1 == NULL)
return pHead2;
if(pHead2 == NULL)
return pHead1;
while(pHead1 != NULL && pHead2 != NULL) {
if(pHead1->val < pHead2->val) {
if(result == NULL) {
result = pHead1;
current = pHead1;
}
else {
current->next = pHead1;
current = pHead1;
}
pHead1 = pHead1->next;
}
else {
if(result == NULL) {
result = pHead2;
current = pHead2;
}
else {
current->next = pHead2;
current = pHead2;
}
pHead2 = pHead2->next;
}
}
/*
//递归写法,把一个大问题看成小部分来处理,解决含有两个值的链表,然后调用自身函数
if(pHead1->val < pHead2->val) {
result = pHead1;
result->next = Merge(pHead1->next, pHead2);
}
else {
result = pHead2;
result->next = Merge(pHead1, pHead2->next);
}
*/
if(pHead1 == NULL) current->next = pHead2;
else current->next = pHead1;
return result;
}
};