合并两个有序链表
输入两个单调递增的链表,输出两个链表合成后的链表,合成后的链表需要满足单调不减规则
思路:谁小取谁,谁小谁动
步骤:
1.定义指针:p1,p2用来分别遍历两个链表;定义一个p,一个pHead,一个进行存数,一个用来最终返回
2.初始化p:取两个链表头结点中的较小值(别忘了让那个指针后移)
3.循环比较两个链表元素,谁小就取谁,谁小就往后移动,直到某一个链表到了尾巴
4.p再去加上另一个链表的剩余部分
/*
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* p1=pHead1;
ListNode* p2=pHead2;
ListNode* p=NULL;
if(p1->val<p2->val)
{
p=p1;
p1=p1->next;
}
else
{
p=p2;
p2=p2->next;
}
ListNode* pHead=p;
while(p1!=NULL&&p2!=NULL)
{
if(p1->val<p2->val)
{
p->next=p1;
p=p->next;
p1=p1->next;
}
else
{
p->next=p2;
p=p->next;
p2=p2->next;
}
}
if(p1!=NULL)
p->next=p1;
if(p2!=NULL)
p->next=p2;
return pHead;
}
};
