zoukankan      html  css  js  c++  java
  • 链表:合并两个有序的链表

     

    题目描述

    输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

    解题思路

    两种解法:递归和非递归

    这个题目就是归并排序中的归并操作,将两个有序数组(链表)合并为一个有序的数组。

    非递归:

    第一个while循环,将 l1 和 l2 进行比较,谁小谁就合并到 listNode,直到 l1 或者 l2 为空

    第二个while循环和第三个while循环,将 l1 或者 l2 剩下的节点合并到 listNode

    最后返回的是 firstNode.next //头节点是不需要的

    参考代码

    递归:运行时间:27ms  占用内存:9564k

     1 /*
     2 public class ListNode {
     3     int val;
     4     ListNode next = null;
     5 
     6     ListNode(int val) {
     7         this.val = val;
     8     }
     9 }*/
    10 public class Solution {
    11     public ListNode Merge(ListNode list1,ListNode list2) {
    12         if(list1 == null) {
    13             return list2;
    14         }
    15         if(list2 == null) {
    16             return list1;
    17         }
    18         ListNode head = null;
    19         if(list1.val < list2.val) {
    20             head = list1;
    21             head.next = Merge(list1.next, list2);
    22         } else {
    23             head = list2;
    24             head.next = Merge(list1, list2.next);
    25         }
    26         return head;
    27     }
    28 }

    非递归:运行时间:26ms  占用内存:9544k

     1 /*
     2 public class ListNode {
     3     int val;
     4     ListNode next = null;
     5 
     6     ListNode(int val) {
     7         this.val = val;
     8     }
     9 }*/
    10 public class Solution {
    11     public ListNode Merge(ListNode l1, ListNode l2) {
    12         ListNode listNode = new ListNode(0);
    13         ListNode firstNode = listNode;
    14         while (l1 != null && l2 != null) {  //将 l1 和 l2 进行比较,谁小谁就合并到 listNode,直到 l1 或者 l2 为空
    15             if (l1.val <= l2.val) {
    16                 listNode.next = l1;
    17                 l1 = l1.next;
    18             } else {
    19                 listNode.next = l2;
    20                 l2 = l2.next;
    21             }
    22             listNode = listNode.next;
    23         }
    24         while (l1 != null) {        //如果l2空了,就将剩余的l1加入到listNode中
    25             listNode.next = l1;
    26             l1 = l1.next;
    27             listNode = listNode.next;
    28         }
    29         while (l2 != null) {        //如果l1空了,就将剩余的l2加入到listNode中
    30             listNode.next = l2;
    31             l2 = l2.next;
    32             listNode = listNode.next;
    33         }
    34         return firstNode.next;
    35     }
    36 }
  • 相关阅读:
    centos7: 将nginx,php-fpm加入开机启动
    centos7: php7.2.9安装配置
    centos7: nginx安装配置
    linux编译安装mysql5.1.x
    docker删除镜像的时候报错--image has dependent child images
    数据库sql优化总结之2-百万级数据库优化方案+案例分析
    数据库sql优化总结之1-百万级数据库优化方案+案例分析
    MongoDB语法与现有关系型数据库SQL语法比较
    Redis和MongoDB的区别以及应用场景
    浏览器渲染基本原理(五):优化渲染性能
  • 原文地址:https://www.cnblogs.com/carry6/p/11520868.html
Copyright © 2011-2022 走看看