zoukankan      html  css  js  c++  java
  • 21. Merge Two Sorted Lists

    Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
    12         ListNode* newHead = new ListNode(-1);
    13         ListNode* tail = newHead;
    14         
    15         while(l1 != NULL && l2 != NULL)
    16         {
    17             if(l1->val <= l2->val){
    18                 tail->next = l1;
    19                 l1 = l1->next;
    20             }
    21             else{
    22                 tail->next = l2;
    23                 l2 = l2->next;
    24             }
    25             tail =tail->next;
    26         }
    27         if(l1 != NULL){
    28             tail->next = l1;
    29         }else if(l2 != NULL){
    30             tail->next = l2;
    31         }
    32         return newHead->next;
    33     }
    34 };

    当我们得到两个链表中值较小的头节点并把它链接到已经合并的链表之后,两个链表剩余的结点依然是排序的,因此合并的步骤和之前的步骤是一样的。这就是典型的递归过程,我们可以定义递归函数完成这个合并过程。

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
    12         if(l1 == NULL)
    13             return l2;
    14         else if(l2 == NULL)
    15           return l1;
    16         
    17         ListNode* pMergedHead = NULL;
    18         
    19         if(l1->val < l2->val)
    20         {
    21             pMergedHead = l1;
    22             pMergedHead->next = mergeTwoLists(l1->next, l2);
    23         }
    24         else
    25         {
    26             pMergedHead = l2;
    27             pMergedHead->next = mergeTwoLists(l1, l2->next);
    28         }
    29         return pMergedHead;
    30     }
    31 };
  • 相关阅读:
    【?】Hello。。。
    【Calc】对于‘精分’的研究
    [AFO]记五年oi生涯及CSP2019复赛游记
    CF#579div.3
    「BZOJ1827」奶牛大集会
    「BZOJ2821」作诗 && 「BZOJ2724」蒲公英
    「BZOJ4576」262144
    「Bzoj5055」膜法师
    「51nod1689」逛街
    「51nod1681」公共祖先 &&「51nod2553」双重祖先
  • 原文地址:https://www.cnblogs.com/sankexin/p/5864115.html
Copyright © 2011-2022 走看看