归并排序的归并步骤,只不过这里使用的是链表,但是归并并不需要随机访问,所以处理链表和数组的思路是一样的。
设需要归并的两个链表分别为p,q(默认为升序排列),比较p和q最左边的元素大小,较小的向后移动,直到一个走到了链表末尾。将没有走完的链表接到已排好序的链表后面即可。
/**
*Definition for singly-linked list.
*struct ListNode {
* int val;
* ListNode*next;
* ListNode(int x) : val(x), next(NULL) {}
*};
*/
class Solution {
public:
ListNode*mergeTwoLists(ListNode* l1, ListNode* l2) {
if(!l1)
returnl2;
elseif (!l2)
returnl1;
else
{
ListNode*head= NULL;
if(l1->val < l2->val)
head= new ListNode(l1->val);
else
head= new ListNode(l2->val);
ListNode*t= head;
while(l1&&l2)
{
if(l1->val < l2->val)
{
t->val= l1->val;
t->next= new ListNode(0);
t= t->next;
l1= l1->next;
}
else
{
t->val= l2->val;
t->next= new ListNode(0);
t= t->next;
l2= l2->next;
}
}
if(l1)
{
t->val=l1->val;
t->next= l1->next;
}
else
{
t->val= l2->val;
t->next= l2->next;
}
returnhead;
}
}
};