• 合并两个排序的链表


    结点:

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

    递归方法进行合并:

    public class Solution{
        public ListNode Merge(ListNode list1,ListNode list2){
    
             //检验鲁棒性
             if(list1 == null) return list2; 
             if(list2 == null) return list1; 
    
             //如果list1的第一个元素小,头结点从list1开始;如果list2的第一个元素小,头结点从list2开始
    
             ListNode node = null;
             if(list1.val > list2.val){
                  node = list2;
                  node.next = Merge(list1, list2.next);
             }
             else{
                  node = list1;
                  node.next = Merge(list1.next, list2);
             }
             return node;
        }
    }

    非递归方法进行合并:

    public class Solution{
        public ListNode Merge(ListNode list1,ListNode list2){

             //检验鲁棒性
             if(list1 == null) return list2; 
    if(list2 == null) return list1;

    //如果list1的第一个元素小,头结点从list1开始;如果list2的第一个元素小,头结点从list2开始
    ListNode head
    = null; if(list1.val > list2.val){ head = list2; list2 = list2.next; } else{ head = list1; list1 = list1.next; }
    ListNode node
    = head; while(list1 != null && list2 != null){ if(list1.val > list2.val){ node.next = list2; list2 = list2.next; } else{ node.next = list1; list1 = list1.next; } node = node.next; } if(list1 == null) node.next = list2; if(list2 == null) node.next = list1; return head; } }

    主要思想:

          1) 链表1的头结点值小于链表2的头结点值,则链表1的头结点是合并后链表的头结点;

          2) 在剩余的结点中,链表2的头结点值小于链表1的头结点值,则链表2的头结点是剩余结点的头结点。

          3) 注意代码在鲁棒性方面存在的问题,如空链表时。

  • 相关阅读:
    intellij idea tomcat 启动不生成war包
    php中的Trait的使用方法
    c++ 命名的强制类型转换
    【递归与动态规划】正则表达式匹配
    c程序设计语言 by K&R(四)输入与输出
    c程序设计语言 by K&R(三)结构
    深入理解c语言指针与内存
    c程序设计语言 by K&R(一)一些c语言基础知识
    c程序设计语言 by K&R(二)指针与数组
    第一次在这里
  • 原文地址:https://www.cnblogs.com/jiqianqian/p/6603922.html
Copyright © 2020-2023  润新知