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 }
  • 相关阅读:
    export ,export default 和 import 区别 以及用法
    koa2 安装环境
    Webstorm在MAC下的安装方法
    Mac 下搭建vue开发环境
    Mac系统下安装Vue-cli详细步骤
    npm 安装vue 报错Failed at the chromedriver@2.34.0 install script 'node install.js'
    #001 WebStrom SVN使用技巧
    #006 dependencies和devDependencies的区别
    #001 GIT创建分支
    #003 React 组件 继承 自定义的组件
  • 原文地址:https://www.cnblogs.com/carry6/p/11520868.html
Copyright © 2011-2022 走看看