想法:
1.迭代
设两个指针pa和pb,不断移动pa和pb,并进行比较,则将较小元素接到新链表,该过程直至pa或pb为null,之后将未空的接到已空之后,得到升序链表
 
 1 //官方:
2 class Solution {
3 public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
4 ListNode prehead = new ListNode(-1);
5
6
7 ListNode prev = prehead;
8 while (l1 != null && l2 != null) {
9 if (l1.val <= l2.val) {
10 prev.next = l1;
11 l1 = l1.next;
12 } else {
13 prev.next = l2;
14 l2 = l2.next;
15 }
16 prev = prev.next;
17 }
18
19
20 // 合并后 l1 和 l2 最多只有一个还未被合并完,我们直接将链表末尾指向未合并完的链表即可
21 prev.next = l1 == null ? l2 : l1;
22
23
24 return prehead.next;
25 }
26 }
27
28
29 作者:LeetCode-Solution
30 链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/solution/he-bing-liang-ge-you-xu-lian-biao-by-leetcode-solu/
31 来源:力扣(LeetCode)
32 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

我写的:

 1 /**
2 * Definition for singly-linked list.
3 * public class ListNode {
4 * int val;
5 * ListNode next;
6 * ListNode() {}
7 * ListNode(int val) { this.val = val; }
8 * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
9 * }
10 */
11 class Solution {
12
13 public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
14 ListNode start = new ListNode(-1);
15 ListNode q = start;
16 if(list1==null || list2==null){//输入为空时
17 if(list1==null){
18 return list2;
19 }else{
20 return list1;
21 }
22 }
23
24 //设两个指针pa和pb,不断移动pa和pb,并进行比较,则将较小元素接到新链表,该过程直至pa或pb为null
25 while(list1!=null && list2!=null){
26 if(!(list1.val>list2.val)){
27 //list1<=list2
28 q.next = list1;
29 list1 = list1.next;
30 }else{//list1>list2
31 q.next = list2;
32 list2 = list2.next;
33 }
34 q = q.next;
35 }
36
37 //之后将未空的接到新链表之后,得到完整升序链表
38 q.next = list1 == null ? list2 : list1;
39 return start.next;
40 }
41 }
2.递归(官方另解)
 
我们直接将以上递归过程建模,同时需要考虑边界情况。
 
如果 l1 或者 l2 一开始就是空链表 ,那么没有任何操作需要合并,所以我们只需要返回非空链表。否则,我们要判断 l1 和 l2 哪一个链表的头节点的值更小,然后递归地决定下一个添加到结果里的节点。如果两个链表有一个为空,递归结束。
 
 
 1 class Solution {
2 public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
3 if (l1 == null) {
4 return l2;
5 } else if (l2 == null) {
6 return l1;
7 } else if (l1.val < l2.val) {
8 l1.next = mergeTwoLists(l1.next, l2);
9 return l1;
10 } else {
11 l2.next = mergeTwoLists(l1, l2.next);
12 return l2;
13 }
14 }
15 }
16
17
18 作者:LeetCode-Solution
19 链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/solution/he-bing-liang-ge-you-xu-lian-biao-by-leetcode-solu/
20 来源:力扣(LeetCode)
21 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Leecode 21.合并两个有序链表(Java 迭代、递归两种方法)的更多相关文章

  1. 合并两个有序链表(java实现)

    题目: 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1-&g ...

  2. LeetCode--021--合并两个有序链表(java)

    将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1->2- ...

  3. 剑指offer-反向遍历链表-栈和递归2种方法(一次性跑通)

  4. 斐波那契数列-java编程:三种方法实现斐波那契数列

    题目要求:编写程序在控制台输出斐波那契数列前20项,每输出5个数换行 斐波那契数列指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, … 这个数列 ...

  5. Java实现 LeetCode 21 合并两个有序链表

    21. 合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1 ...

  6. LeetCode 21. 合并两个有序链表(Merge Two Sorted Lists)

    21. 合并两个有序链表 21. Merge Two Sorted Lists 题目描述 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. LeetCode ...

  7. [LeetCode] 21. 合并两个有序链表

    题目链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/ 题目描述: 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定 ...

  8. Leecode刷题之旅-C语言/python-21.合并两个有序链表

    /* * @lc app=leetcode.cn id=21 lang=c * * [21] 合并两个有序链表 * * https://leetcode-cn.com/problems/merge-t ...

  9. [LC]21题 Merge Two Sorted Lists (合并两个有序链表)(链表)

    ①英文题目 Merge two sorted linked lists and return it as a new list. The new list should be made by spli ...

  10. LeetCode 21:合并两个有序链表 Merge Two Sorted Lists

    将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. Merge two sorted linked lists and return it as a new ...

随机推荐

  1. SpringBoot2.2.2+SpringCloud-Hoxton.SR1整合eureka/gateway

    1.最近在学习SpringCloud分布式项目的知识,所以打算把自己学习到的知识也记录下来,为什么选择学习SpringCloud呢?因为分布式框架还有dubbo,如下图应该可以成为我为什么想学习Spr ...

  2. java第七周学习情况

    这个星期 主要是在搞学校在暑期安排的实验报告b 怎么说来着 才知道这个消息几天  这是对学习不上心的体现啊 题目也有点多 慢慢做呗 而Java这边还是看些相关知识呗 说实话 已经学不太懂了 不过没关系 ...

  3. 启动JAVA服务

    # -*- coding: utf-8 -*- import re import sys from subprocess import Popen, PIPE import os import tim ...

  4. vite 路径别名 @ 配置

    vite.config.ts resolve.alias 配置 const path = require('path'); import { defineConfig } from 'vite'; i ...

  5. HCIP-ICT实战进阶04-ISIS原理与配置

    HCIP-ICT实战进阶04-ISIS原理与配置 0 前言 IS-IS(Intermediate System to Intermediate System, 中间系统到中间系统)协议, 和OSPF一 ...

  6. Jmeter添加Base64Img函数支持图片转换为Base64编码

    将JmeterBase64-1.0-SNAPSHOT放置到\lib\ext下即可: 直接使用即可. 制作方式: Jar包通过IntelliJ IDEA创建maven工程后,导出package:

  7. Sharp7与S7NetPlus 性能测试

    介绍 ​ Sharp7和都S7NetPlus是纯C#实现的基于以太网与S7系列的西门子PLC通讯的开源库.都支持.net core 跨平台可以部署在linxu, docker,windwos 中. 测 ...

  8. Jetpack compose初尝试

    2021/07/29 Jetpack compose1.0正式发布,已经可以在生产环境中使用了. 下面的内容为根据官方教程尝试的总结,上手没难度,而且也不需要配置什么环境. Android 开发者   ...

  9. MySQL8.0使用GROUP BY的问题

    当使用group by的语句中,select后面跟的列,在group by后面没有时,会报以下错误: Expression #2 of SELECT list is not in GROUP BY c ...

  10. http hook

    class XMLHttp { request = function(param) {} ; response = function(param) {} ; } let httpCopy = new ...