合并两个有序链表(java)

由于平时荒废了学习工作,等到想要找工作才发现已经遗忘忘了,开始重新刷算法题。

合并两个有序链表是一个常见的算法问题,特别在链表操作中。这个问题可以使用递归或迭代的方式解决,下面将详细讲解如何在Java中合并两个有序链表。

链表节点类

首先,我们需要定义一个链表节点的类。这个节点类包含一个整数值 val 和一个指向下一个节点的指针 next。下面是这个节点类的定义:

public class ListNode {
    int val;
    ListNode next;
	ListNode(int val) {
    this.val = val;
	}
}

迭代方法

使用迭代方法合并两个有序链表是比较直接的方式。我们可以创建一个哑节点(dummy node)来简化合并过程,并使用一个指针指向当前节点。下面是合并两个有序链表的迭代方法的代码:

public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
    ListNode dummy = new ListNode(-1); // 创建一个哑节点
    ListNode current = dummy; // 创建一个指针指向当前节点
	while (l1 != null && l2 != null) {
    if (l1.val < l2.val) {
        current.next = l1;
        l1 = l1.next;
    } else {
        current.next = l2;
        l2 = l2.next;
    }
    current = current.next;
}

// 如果某个链表还有剩余元素,直接连接到新链表末尾
if (l1 != null) {
    current.next = l1;
} else {
    current.next = l2;
}

return dummy.next; // 返回合并后的链表(跳过哑节点)
}

这个方法中,我们使用两个指针 l1 和 l2 分别指向两个输入链表的当前节点,然后比较它们的值,将较小的节点添加到新链表中,同时移动相应的指针。最后,我们检查是否有一个链表还有剩余元素,如果有,直接将它们接在新链表的末尾。

使用示例

现在我们可以使用上面的方法来合并两个有序链表。以下是一个示例用法:

ListNode l1 = new ListNode(1);
l1.next = new ListNode(2);
l1.next.next = new ListNode(4);

ListNode l2 = new ListNode(1);
l2.next = new ListNode(3);
l2.next.next = new ListNode(4);

ListNode mergedList = mergeTwoLists(l1, l2);

这个示例合并了两个有序链表 l1 和 l2,并将结果存储在 mergedList 中。

整体思路就是这样,算法感觉还是得看看,长时间不做就忘完了。。。。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gnehcgnem

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值