21.Merge Two Sorted Lists

归并排序的归并步骤,只不过这里使用的是链表,但是归并并不需要随机访问,所以处理链表和数组的思路是一样的。

设需要归并的两个链表分别为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;

              }

       }

};

 

posted @ 2016-11-21 17:13  Initial_Dream  阅读(93)  评论(0编辑  收藏  举报