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)

                     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;

              }

       }

};

發佈了40 篇原創文章 · 獲贊 19 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章