第13题合并两个有序链表(考察递归)
Posted 小虚竹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第13题合并两个有序链表(考察递归)相关的知识,希望对你有一定的参考价值。
回城传送–》《JAVA筑基100例》
文章目录
零、前言
今天是学习 JAVA语言 打卡的第13天,每天我会提供一篇文章供群成员阅读( 不需要订阅付钱 ),读完文章之后,按解题思路,自己再实现一遍。在小虚竹JAVA社区 中对应的 【打卡贴】打卡,今天的任务就算完成了。
因为大家都在一起学习同一篇文章,所以有什么问题都可以在群里问,群里的小伙伴可以迅速地帮到你,一个人可以走得很快,一群人可以走得很远,有一起学习交流的战友,是多么幸运的事情。
学完后,自己写篇学习报告的博客,可以发布到小虚竹JAVA社区 ,供学弟学妹们参考。
我的学习策略很简单,题海策略+ 费曼学习法。如果能把这100题都认认真真自己实现一遍,那意味着 JAVA语言 已经筑基成功了。后面的进阶学习,可以继续跟着我,一起走向架构师之路。
一、题目描述
原题地址–》传送门
题目:
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
二、解题思路
- 如果把问题拆解成子问题,子问题具有跟父问题一样的结构,可以考虑用自上而下的递归
- 对两个有序链接l1和l2进行判空处理,有空的话,返回另一个非空链接
三、代码详解
ListNode 链表对象
package com.xiaoxuzhu;
/**
* Description: 链表对象
*
* @author zenghw
* @version 1.0
*
* <pre>
* 修改记录:
* 修改后版本 修改人 修改日期 修改内容
* 2022/8/21.1 zenghw 2022/8/21 Create
* </pre>
* @date 2022/8/21
*/
public class ListNode
int val;
ListNode next;
public ListNode()
super();
public ListNode(int val)
this.val = val;
this.next = null;
public ListNode(int val, ListNode next)
this.val = val;
this.next = next;
Solution类
package com.xiaoxuzhu;
/**
* Description: 合并两个有序链表(考察递归)
*
* @author zenghw
* @version 1.0
*
* <pre>
* 修改记录:
* 修改后版本 修改人 修改日期 修改内容
* 2022/8/21.1 zenghw 2022/8/21 Create
* </pre>
* @date 2022/8/21
*/
class Solution
public static void main(String[] args)
//l1 = [1,2,4], l2 = [1,3,4]
//初始化数据
int[] l1 = new int[]1,2,4;
int[] l2 = new int[]1,3,4;
//创建首节点,节点的val是1.
ListNode listnode1 = new ListNode(1);
//创建首节点,节点的val是1.
ListNode listnode2 = new ListNode(1);
initListNode(listnode1,l1);
initListNode(listnode2,l2);
ListNode listnode3 = mergeTwoLists(listnode1,listnode2);
print(listnode3);
private static void print(ListNode listnode)
//创建链表节点
while(listnode!=null)
System.out.println("节点:"+listnode.val);
listnode=listnode.next;
/**
* 创建链表
*
* @param listnode 链表对象
* @param arr 初始化数组数据
*@return void
**/
public static void initListNode(ListNode listnode,int[] arr)
//声明一个变量用来在移动过程中指向当前节点
ListNode nextNode;
//指向首节点,这样两个结点的指针指向同一个结点
nextNode=listnode;
//创建链表
for (int i = 1; i < arr.length; i++)
//把新节点连起来
nextNode.next= new ListNode(arr[i]);
//当前节点往后移动
nextNode=nextNode.next;
/**
* 合并链表
*
* @param l1 要合并的链表1
* @param l2 要合并的链表2
*@return com.xiaoxuzhu.ListNode
**/
public static ListNode mergeTwoLists(ListNode l1, ListNode l2)
if (l1 == null)
return l2;
else if (l2 == null)
return l1;
else if (l1.val < l2.val)
l1.next = mergeTwoLists(l1.next, l2);
return l1;
else
l2.next = mergeTwoLists(l1, l2.next);
return l2;
四、推荐专栏
五、示例源码下载
关注下面的公众号,回复筑基+题目号
筑基13
以上是关于第13题合并两个有序链表(考察递归)的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode Java刷题笔记—21. 合并两个有序链表
LeetCode Java刷题笔记—21. 合并两个有序链表
Leetcode练习(Python):链表类:第21题:合并两个有序链表:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。