题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
方法1:
/*
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 * p = NULL;
ListNode * head = NULL;
while(pHead1!=NULL && pHead2!=NULL){
if(pHead1->val <= pHead2->val){
if(head == NULL)
head = p = pHead1;
else{
//ListNode * node = new ListNode(pHead1->val);
p->next = pHead1;
p = p->next;
}
pHead1 = pHead1->next;
}else if(pHead2->val < pHead1->val){
//ListNode * node = new ListNode(pHead2->val);
if(head == NULL)
head = p = pHead2;
else{
p->next = pHead2;
p = p->next;
}
pHead2 = pHead2->next;
}
//if(head == NULL){//目的是第一次循环时,使得头指针指向第一个结点
// head->next = p;
//}
}//while
//当其中一个链表为空了后,直接拷贝另一条剩余的
if(pHead1 == NULL){
//while(pHead2){
//ListNode * node = new ListNode(pHead2->val);
p->next = pHead2;
//p = p->next;
//pHead2 = pHead2->next;
//}
}
if(pHead2 == NULL){
//while(pHead1){
//ListNode * node = new ListNode(pHead1->val);
p->next = pHead1;
//p = p->next;
//pHead1 = pHead1->next;
//}
}
return head;
}
};
方法二:递归
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {//第二种方法,递归 ListNode * node = NULL; if(pHead1 == NULL) return pHead2; if(pHead2 == NULL) return pHead1; if(pHead1->val <= pHead2->val){ node = pHead1; node->next = Merge(pHead1->next,pHead2); }else { node = pHead2; node->next = Merge(pHead1,pHead2->next); } return node; } };