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

*/
posted @ 2019-10-07 16:43  helloHKTK  阅读(109)  评论(0编辑  收藏  举报