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

    ---恢复内容开始---

    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.

    Example:

    Input: 1->2->4, 1->3->4
    Output: 1->1->2->3->4->4

    合并两个有序链表,最后返回新的链表。实现思路很简单,对比两个链表每一个结点值的大小,然后优先拼接到新表的尾部。

    1.非递归方法:

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     struct ListNode *next;
     6  * };
     7  */
     8 struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
     9     if(l1 == NULL) return l2;
    10     if(l2 == NULL) return l1;
    11     if(l1==NULL && l2==NULL) return NULL;
    12     struct ListNode *head=NULL;
    13     if(l1->val < l2->val)
    14     {
    15         head=l1;
    16         l1=l1->next;
    17     }
    18     else
    19     {
    20         head=l2;
    21         l2=l2->next;
    22     }
    23     struct ListNode *p=head; 
    24     while(l1 && l2)
    25     {
    26         if(l1->val < l2->val)
    27         {
    28             p->next=l1;
    29             l1=l1->next;
    30         }
    31         else
    32         {
    33            p->next=l2;
    34            l2=l2->next;
    35         }
    36         p=p->next;
    37     }
    38  
    39     if(l1) p->next=l1;  //如果还剩下l1结点,则把l1加到新链表
    40     if(l2) p->next=l2;  //如果还剩下l2结点,则把l2加到新链表
    41     return head;
    42 }

    2.递归方法。这个方法还是看别的大神做的,代码很简洁,很惊艳。

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     struct ListNode *next;
     6  * };
     7  */
     8 struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
     9     if(l1 == NULL) return l2;
    10     if(l2 == NULL) return l1;
    11     if(l1==NULL && l2==NULL) return NULL;
    12     //假如一开始是l1数据域小,递归结束后返回新l1(即首地址),反之同理。
    13     if(l1->val <= l2->val){
    14         l1->next = mergeTwoLists(l1->next,l2);
    15         return l1;
    16     }else{
    17         l2->next = mergeTwoLists(l1,l2->next);
    18         return l2;
    19     }
    20 }
  • 相关阅读:
    Android基站定位
    删除远程分支
    docker的相关使用
    [整理]-端口的概念、常用端口及其对应服务
    [转]-nohup-真正的Shell后台运行
    转- 在ubuntu下安装Nginx
    转: 命名关键字参数
    远程SCP报错,报22号口错误
    vim保存时提示: 无法打开并写入文件
    如何处理导出的csv无法查看身份证后三位的情况?
  • 原文地址:https://www.cnblogs.com/real1587/p/9839056.html
Copyright © 2011-2022 走看看