编程题 - 链表合并(递归)

本文详细介绍了如何将两个有序链表合并成一个新链表。通过定义链表结构,采用递归方法,逐一比较节点值并拼接,最终得到有序合并后的链表。示例代码展示了具体的实现过程,并提供了递归的步骤图解,帮助理解算法逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

将两个有序链表合并为一个新的有序链表并返回。 新链表是通过拼接给定的两个链表的所有节点组成的。
比如两个链表: 1->3->4 2->5->6
最后输出变成: 1->2->3->4->5->6

思路:

  1. 定义一个链表结构
  2. 合并链表,一对一比较大小,将合并的链表放入新创建的链表中

代码:

/**
 * @description:链表结构
 * @author: huoyajing
 * @time: 2021/6/6 6:01 下午
 */

public class ListNode {
    //当前值
    int val;
    //链表下一个结点值
    ListNode next;
    //构造函数
    ListNode(int value){
        val=value;
    }
}
/**
	 * 合并方法
	 * @param node1
	 * @param node2
	 * @return
	 */
	public static ListNode merge(ListNode node1, ListNode node2) {
		//最后输出链表
		ListNode mergeLinked;

		if (node1 == null) {
			return node2;
		} else if (node2 == null) {
			return node1;
		}

		//递归实现
		if (node1.val < node2.val) {
			mergeLinked = node1;
			mergeLinked.next = merge(node1.next, node2);
		} else {
			mergeLinked = node2;
			mergeLinked.next = merge(node1, node2.next);
		}
		
		return mergeLinked;
	}
	public static void main(String[] args) {
		//两个链表 nodeRoot1和nodeRoot2 1->3>4 2>5>6
		ListNode nodeRoot1 = new ListNode(1);
		ListNode node2 = new ListNode(3);
		ListNode node3 = new ListNode(4);
		ListNode nodeRoot2 = new ListNode(2);
		ListNode node5 = new ListNode(5);
		ListNode node6 = new ListNode(6);
		nodeRoot1.next = node2;
		node2.next = node3;
		nodeRoot2.next = node5;
		node5.next = node6;
		ListNode node = merge(nodeRoot1, nodeRoot2);
		//循环输出
		while (node != null) {
			System.out.println(node.val + " ");
			node = node.next;
		}
	}

代码解释图解:
递归1:
在这里插入图片描述
递归2:
在这里插入图片描述
递归3:
在这里插入图片描述
递归4:
在这里插入图片描述
递归5:
在这里插入图片描述
最后剩下node2,直接落入即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值