歸併排序的歸併步驟,只不過這裏使用的是鏈表,但是歸併並不需要隨機訪問,所以處理鏈表和數組的思路是一樣的。
設需要歸併的兩個鏈表分別爲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;
}
}
};