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 };
  • 相关阅读:
    最长回文子串
    无题2
    第N个泰波那契数
    除数博弈
    函数调用_强制指定回调函数的函数上下文
    函数调用_通过apply和call方法调用
    函数调用_通过构造函数调用
    理解函数调用_函数调用
    处理集合_删除数组元素的粗略方法
    理解函数调用_使用严格模式边使用arguments别名
  • 原文地址:https://www.cnblogs.com/sankexin/p/5864115.html
Copyright © 2011-2022 走看看