• 013 合并两个排序的链表


    题目描述

    输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

    1. 方法一:递归法 (很优雅)

    思路:
    当合并完前两个结点之后,剩下的结点仍然是有序的,合并的步骤和之前的步骤相同,自然要想到使用【递归】来完成。
    
    // 牛客网通过
    
    /*
    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;
    
            ListNode mergeList = null;
            if (list1.val <= list2.val)
            {
                mergeList = list1;
                list1 = list1.next;
                mergeList.next = Merge(list1, list2); // 递归
            }
            else
            {
                mergeList = list2;
                list2 = list2.next;
                mergeList.next = Merge(list1, list2); // 递归
            }
            return mergeList;
        }
    }
    

    本地测试完整代码

    class ListNode{
        int val;
        ListNode next = null;
        ListNode(int val)
        {
            this.val = val;
        }
    }
    
    public class MergeList {
        public static void main(String[] args) {
            int[] arr1 = {1, 3, 5};
            int[] arr2 = {2, 4, 6};
            ListNode list1 = createList(arr1);
            ListNode list2 = createList(arr2);
            printList(list1);
            printList(list2);
    
    
            // 合并两个排号序的list
            ListNode mergeList = Merge2(list1, list2);
            printList(mergeList);
    
        }
    
        public static ListNode createList(int[] arr)
        {
            ListNode head = new ListNode(arr[0]);
            ListNode tail = head;
            for (int i = 1; i < arr.length; i++)
            {
                ListNode nowNode = new ListNode(arr[i]);
                tail.next = nowNode;
                tail = tail.next;
            }
            return head;
        }
    
        public static void printList(ListNode head)
        {
            while (head != null)
            {
                if (head.next == null)
                    System.out.println(head.val);
                else
                    System.out.print(head.val + "-->");
                head = head.next;
            }
        }
    
        public static ListNode Merge2(ListNode list1,ListNode list2)
        {
            if (list1 == null)
                return list2;
            if (list2 == null)
                return list1;
    
            ListNode mergeList = null;
            if (list1.val <= list2.val)
            {
                mergeList = list1;
                list1 = list1.next;
                mergeList.next = Merge2(list1, list2);
            }
            else
            {
                mergeList = list2;
                list2 = list2.next;
                mergeList.next = Merge2(list1, list2);
            }
            return mergeList;
        }
    }
    
    /* 运行结果:
    
    1-->3-->5
    2-->4-->6
    1-->2-->3-->4-->6
    
    */
    
  • 相关阅读:
    程序员偷偷深爱的9个不良编程习惯
    JQuery实现放大镜
    ACM1995
    liubo.im
    Linux中的一些点
    EPOLL使用详解
    Elays'Blog
    c#数据库解析
    codeforces #332 div 2 D. Spongebob and Squares
    类型
  • 原文地址:https://www.cnblogs.com/helloHKTK/p/11631025.html
Copyright © 2020-2023  润新知