• leetcode 热题 100_合并两个有序链表


    题解一:

            迭代:分别用两个指针遍历两段链表,逐步比较两链表的节点,将值较大的节点存入新链表,同时指针移动,直到某段链表遍历结束,将另一段链表剩余的节点存入新链表。需要注意存入新链表时要用新链表.next来存避免新链表指针出错。

    1. import java.awt.*;
    2. class Solution {
    3. public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
    4. if (list1 == null) return list2;
    5. else if (list2 == null) return list1;
    6. ListNode result = new ListNode();
    7. ListNode temp = result;
    8. ListNode p1 = list1, p2 = list2;
    9. while (p1 != null && p2 != null) {
    10. if (p1.val <= p2.val) {
    11. temp.next = p1;
    12. p1 = p1.next;
    13. } else {
    14. temp.next = p2;
    15. p2 = p2.next;
    16. }
    17. temp = temp.next;
    18. }
    19. if (p1 == null && p2 != null) {
    20. while (p2 != null) {
    21. temp.next = p2;
    22. p2 = p2.next;
    23. temp = temp.next;
    24. }
    25. } else if (p1 != null && p2 == null) {
    26. while (p1 != null) {
    27. temp.next = p1;
    28. p1 = p1.next;
    29. temp = temp.next;
    30. }
    31. }
    32. return result.next;
    33. }
    34. }

    题解二:

            递归:将迭代的过程通过递归来实现,但由于递归核心代码是从链表末端开始执行的,所以无需考虑链表节点的覆盖问题,不容易出错,但递归也较难理解。具体递归步骤是先确定结束条件,判断两段链表是否为null再比较传入的两节点值(记做节点ab),将较大值节点a指向下一节点,这里下一节点可能是和它比较的节点b,或者它原先的下一节点a.next,具体要进行下一步比较,所以我们将节点ba.next作为参数递归调用,并将较大的节点作为返回值。附上图解(来源. - 力扣(LeetCode)

    1. import java.awt.*;
    2. class Solution {
    3. public ListNode F(ListNode list1, ListNode list2) {
    4. if (list1 == null) return list2;//递归结束条件
    5. else if (list2 == null) return list1;
    6. if (list1.val <= list2.val) {//调用递归并返回
    7. list1.next = F(list1.next, list2);
    8. return list1;
    9. } else {
    10. list2.next = F(list1, list2.next);
    11. return list2;
    12. }
    13. }
    14. public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
    15. ListNode result = F(list1, list2);
    16. return result;
    17. }
    18. }

  • 相关阅读:
    多段曲线控温从Simulink仿真到PLC控制实现
    Go程序(Grpc服务)协程数暴涨的原因排查分析
    常用的生命钩子(VUe2方法)
    MySQL 中的锁机制
    【佳学基因检测】在LARAVEL中如何使用和设置路由组
    ROS 多机器人导航RVIZ环境的配置
    微信小程序和APP:关于跳转及调用支持方式整理
    docker和Helm Chart的基本命令和操作
    微信小程序|使用小程序制作一个世界杯球员识别工具
    Fiddler实现android手机抓包
  • 原文地址:https://blog.csdn.net/lll2034006613/article/details/136666443