当前位置: 首页 > news >正文

西安中交建设集团网站wordpress设置域名后403

西安中交建设集团网站,wordpress设置域名后403,仿京东网站,如何做手机app软件Java 实现合并两个有序链表:递归与迭代 在面试和算法题中,合并两个有序链表是一个经典问题。通过这个问题,不仅可以考察候选人的基础数据结构掌握情况,还能测试他们对递归和迭代等编程技巧的应用能力。 本文将讨论如何使用 Java…

Java 实现合并两个有序链表:递归与迭代

在面试和算法题中,合并两个有序链表是一个经典问题。通过这个问题,不仅可以考察候选人的基础数据结构掌握情况,还能测试他们对递归和迭代等编程技巧的应用能力。

本文将讨论如何使用 Java 递归与迭代两种方法来实现合并两个有序链表。

问题描述

给定两个有序链表 list1list2,将它们合并成一个新的有序链表,并返回合并后的链表。

示例:

  • 输入:list1 = [1,2,4], list2 = [1,3,4]
  • 输出:[1,1,2,3,4,4]
方法一:递归实现

递归是一种非常直观且简洁的方法,特别适用于类似链表这种天然递归的数据结构。下面是基于递归的解决方案:

public class MergeTwoSortedList {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {// 如果list1为空,则直接返回list2if(list1 == null) return list2;// 如果list2为空,则直接返回list1if (list2 == null) return list1;// 如果list1的值小于list2的值if (list1.val < list2.val) {// 递归调用mergeTwoLists函数,将list1的下一个节点和list2进行合并,并将结果赋值给list1的nextlist1.next = mergeTwoLists(list1.next, list2);// 返回list1return list1;} else {// 递归调用mergeTwoLists函数,将list1和list2的下一个节点进行合并,并将结果赋值给list2的nextlist2.next = mergeTwoLists(list1, list2.next);// 返回list2return list2;}}
}
递归方法的思路解析:
  1. 基本情况

    • 如果 list1null,则直接返回 list2,因为此时 list2 仍然有值,且不需要进一步操作。
    • 如果 list2null,则直接返回 list1,同理。
  2. 递归情况

    • 比较 list1list2 的当前节点值。如果 list1 的值较小,那么我们将 list1.nextlist2 合并,并将结果赋值给 list1.next,然后返回 list1
    • 否则,将 list2.nextlist1 合并,并将结果赋值给 list2.next,然后返回 list2
  3. 递归结束

    • 递归的结束条件是某一个链表到达末尾,此时直接返回另一个链表剩余的部分。
方法二:迭代实现

虽然递归方法简单易懂,但在深度较大的链表上可能会导致栈溢出问题。因此,使用迭代方法更为稳健。下面是使用迭代方法实现的代码:

public class MergeTwoSortedList {public ListNode mergeTwoLists1(ListNode list1, ListNode list2) {// 创建一个虚拟头节点,以便于操作ListNode sentinel = new ListNode(-1);ListNode prev = sentinel;// 合并两个链表,直到其中一个链表为空while (list1 != null && list2 != null) {// 如果list1的当前节点值小于list2的当前节点值if (list1.val < list2.val) {// 将list1的当前节点接到prev的后面prev.next = list1;// 移动list1的指针到下一个节点list1 = list1.next;} else {// 将list2的当前节点接到prev的后面prev.next = list2;// 移动list2的指针到下一个节点list2 = list2.next;}// 移动prev的指针到下一个节点prev = prev.next;}// 如果list1还有剩余节点,则将剩余节点接到prev的后面// 否则将list2的剩余节点接到prev的后面prev.next = list1 == null ? list2 : list1;// 返回合并后的链表的头节点return sentinel.next;}
}
迭代方法的思路解析:
  1. 创建哨兵节点

    • 我们使用一个哨兵节点 sentinel 来简化链表头节点的处理,最终返回 sentinel.next 即为合并后的链表头。
  2. 循环比较

    • 使用 prev 指针遍历并合并两个链表,将较小的节点接到 prev 后面,并向前移动相应链表的指针。
  3. 处理剩余节点

    • 当一个链表处理完后,将另一个链表的剩余部分直接接在 prev 后面。
  4. 返回结果

    • 最后返回 sentinel.next 即为合并后的链表。
测试代码

以下是一个简单的测试用例,验证我们的实现是否正确:

public static void main(String[] args) {ListNode listNode = new MergeTwoSortedList().mergeTwoLists1(new ListNode(1, new ListNode(2)), new ListNode(2, new ListNode(4)));new MergeTwoSortedList().printListNode(listNode);
}

运行结果为:1 2 2 4,表示合并操作成功。

结论

本文讨论了在 Java 中使用递归和迭代两种方式实现合并两个有序链表的方法。递归方法简洁直观,但可能会遇到栈溢出问题;而迭代方法稍微复杂一些,但更为稳健。在实际应用中,开发者可以根据具体情况选择合适的方法。

http://www.yayakq.cn/news/83806/

相关文章:

  • 昆明网站建设搜q.479185700wordpress高级版破解版
  • 网站建设 杭州什么都可以看的浏览器
  • 做网站推广销售网络营销的特点是
  • 北京企业网站建设公司哪家好如何建设医院网站
  • 封面型网站怎么做的wordpress评论不要地址邮箱
  • 共享ip做网站外贸手表网站模板
  • 幕墙设计培训乡网站建设网上购物平台投诉电话
  • 坦洲网站建设公司哪家好长沙小程序专业开发公司
  • 国外网站 网速慢网站改版对网站优化影响最大的问题是什么
  • 怎样进网站空间网站开发肇庆培训
  • 温岭市市住房和城乡建设规划局网站企业品牌策划与设计
  • 高端网站制作流程在线设计平台的消费者分析
  • 泰州住房和城乡建设厅网站首页上海电商网站建设
  • 外贸soho怎么建网站找企业名录的网站
  • 哪些网站可以做相册视频自己做视频用什么软件
  • 网站介绍的ppt怎么做商标设计思路
  • 网站建设 锐颖科技网站开发需求文档案例
  • 福州建设工程协会网站查询系统拼多多网站建设框架图
  • 莒县城阳网站建设在线教育网站开发
  • 销售产品单页面网站如何做网站的教程二维码
  • 网页制作与网站建设作业wordpress 搬家 空白
  • 龙华o2o网站建设yandex搜索引擎入口
  • 深圳宝安外贸网站建设公司北京公司网站建设
  • 美容平台网站建设logo灵感网站
  • 现代网站开发设计报告二维码制作app
  • 阿里巴巴网站怎么做全屏分类建筑公司企业愿景怎么写
  • 网站设计会计分录怎么做新闻类的网站如何做优化、
  • 南宁网站建设gxjzdrj网络推广合作资源平台
  • 德州乐陵德州seo公司医疗网站建设及优化方案
  • 如何自己做网站腾讯wordpress导航添加图片