java编程中如何建立一个链表(JAVA筑基100例第13题合并两个有序链表)
java编程中如何建立一个链表(JAVA筑基100例第13题合并两个有序链表)ListNode 链表对象原题地址--》传送门 题目: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。❤️点赞 收藏 ⭐再看,养成习惯❞今天是学习 「JAVA语言」 打卡的第13天,我的学习策略很简单,题海策略 费曼学习法。如果能把这100题都认认真真的自己实现一遍,那意味着 「JAVA语言」 已经筑基成功了。后面的进阶学习,可以继续跟着我,一起走向架构师之路。
#头条创作挑战赛#
❝
❤️作者简介:大家好 我是小虚竹。Java领域优质创作者,CSDN博客专家,华为云享专家,掘金年度人气作者,阿里云专家博主,51CTO专家博主
❤️技术活,该赏
❤️点赞 收藏 ⭐再看,养成习惯
❞
零、前言今天是学习 「JAVA语言」 打卡的第13天,我的学习策略很简单,题海策略 费曼学习法。如果能把这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;
}
}
}
我是虚竹哥,我们下一题见~