归并排序的归并步骤,只不过这里使用的是链表,但是归并并不需要随机访问,所以处理链表和数组的思路是一样的。
设需要归并的两个链表分别为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) return l2; elseif (!l2) return l1; 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; } return head; } } };