快捷搜索:  汽车  科技

java编程中如何建立一个链表(JAVA筑基100例第13题合并两个有序链表)

java编程中如何建立一个链表(JAVA筑基100例第13题合并两个有序链表)ListNode 链表对象原题地址--》传送门 题目: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。❤️点赞 收藏 ⭐再看,养成习惯❞今天是学习 「JAVA语言」 打卡的第13天,我的学习策略很简单,题海策略 费曼学习法。如果能把这100题都认认真真的自己实现一遍,那意味着 「JAVA语言」 已经筑基成功了。后面的进阶学习,可以继续跟着我,一起走向架构师之路。

#头条创作挑战赛#

❤️作者简介:大家好 我是小虚竹。Java领域优质创作者,CSDN博客专家,华为云享专家,掘金年度人气作者,阿里云专家博主,51CTO专家博主

❤️技术活,该赏

❤️点赞 收藏 ⭐再看,养成习惯

零、前言

今天是学习 「JAVA语言」 打卡的第13天,我的学习策略很简单,题海策略 费曼学习法。如果能把这100题都认认真真的自己实现一遍,那意味着 「JAVA语言」 已经筑基成功了。后面的进阶学习,可以继续跟着我,一起走向架构师之路。

一、题目描述

原题地址--》传送门 题目: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

java编程中如何建立一个链表(JAVA筑基100例第13题合并两个有序链表)(1)

java编程中如何建立一个链表(JAVA筑基100例第13题合并两个有序链表)(2)

二、解题思路
  • 如果把问题拆解成子问题,子问题具有跟父问题一样的结构,可以考虑用自上而下的递归
  • 对两个有序链接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; } } }

java编程中如何建立一个链表(JAVA筑基100例第13题合并两个有序链表)(3)

我是虚竹哥,我们下一题见~

猜您喜欢: