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 };
  • 相关阅读:
    Java中的String问题
    【转载】Java与C++语言在作用域上的差异浅析
    【转载】Java是传值还是传引用
    Boost学习资源
    程序4-4 chmod函数实例
    程序4-3 umask函数实例
    程序4-2 access函数实例
    程序4-1 对每个命令行参数打印文件类型
    程序3-5 对一个文件描述符打开一个或多个文件状态标志
    程序3-4 对指定的描述符打印文件标志
  • 原文地址:https://www.cnblogs.com/sankexin/p/5864115.html
Copyright © 2011-2022 走看看