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 };
  • 相关阅读:
    setTimeout中0毫秒延时
    javascript中call和apply方法
    javascript闭包
    apns 服务
    新的开始,新的起点
    心情笔记
    如何解决控件附件上传时超大附件无法上传的问题
    BPM实例分享——日期自动计算
    BPM实例分享——金额规则大写
    分享一个程序猿在流程数据查看权限问题的总结
  • 原文地址:https://www.cnblogs.com/sankexin/p/5864115.html
Copyright © 2011-2022 走看看