博客
关于我
【刷题1】LeetCode 21. 合并两个有序链表 java题解
阅读量:762 次
发布时间:2019-03-23

本文共 775 字,大约阅读时间需要 2 分钟。

合并两个有序链表的方法

单节点链表的定义

class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}

链表合并方法:迭代实现

class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
如果两个链表都为空,返回空节点
如果一个链表为空,直接返回另一个链表
初始化合并链表的顶部节点,并用临时节点跟踪当前位置
使用循环迭代,在两个链表都为空之前进行比较并合并节点
当某个链表遍历完毕后,将剩下的节点连接到结果链表中
返回合并后的链表起始节点
}

时间复杂度:O(n+m)

合并两个链表的时间复杂度是两个链表长度之和,主要是为了遍历每个节点

空间复杂度:O(1)
我们仅使用常数空间来存储几个变量,主要是对比操作和字段访问

递归方法

递归方法通过递归调用函数来解决问题,具有以下优势:
简单易懂,逻辑清晰,实现代码较为简洁
适合edu环境下学习和理解基本算法思想

代码示例

public ListNode mergeTwoLists(ListNode l1, ListNode l2) {      如果两个链表都为空,返回空节点      如果一个链表为空,直接返回另一个链表      否则,递归调用函数合并两头节点较小的链表      调用递归合并较大的链表剩余节点      最后将两部分连接起来  }

优点

  • 简单直观,易于理解
  • 适合递归训练,帮助掌握递归思想
  • 实现代码简洁,易于维护

转载地址:http://arczk.baihongyu.com/

你可能感兴趣的文章
Nokia5233手机和我装的几个symbian V5手机软件
查看>>
non linear processor
查看>>
Non-final field ‘code‘ in enum StateEnum‘
查看>>
none 和 host 网络的适用场景 - 每天5分钟玩转 Docker 容器技术(31)
查看>>
None还可以是函数定义可选参数的一个默认值,设置成默认值时实参在调用该函数时可以不输入与None绑定的元素...
查看>>
NoNodeAvailableException None of the configured nodes are available异常
查看>>
Vue.js 学习总结(16)—— 为什么 :deep、/deep/、>>> 样式能穿透到子组件
查看>>
nopcommerce商城系统--文档整理
查看>>
NOPI读取Excel
查看>>
NoSQL&MongoDB
查看>>
NoSQL介绍
查看>>
NoSQL数据库概述
查看>>
Notadd —— 基于 nest.js 的微服务开发框架
查看>>
NOTE:rfc5766-turn-server
查看>>
Notepad ++ 安装与配置教程(非常详细)从零基础入门到精通,看完这一篇就够了
查看>>
Notepad++在线和离线安装JSON格式化插件
查看>>
notepad++最详情汇总
查看>>
notepad++正则表达式替换字符串详解
查看>>
notepad如何自动对齐_notepad++怎么自动排版
查看>>
Notes on Paul Irish's "Things I learned from the jQuery source" casts
查看>>