合并两个排序的链表

题目描述

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

解题思路一

采用归并排序的归并

public ListNode Merge1(ListNode list1, ListNode list2) {
    ListNode resultList = new ListNode(0);//存放结果集
    ListNode lastNode = resultList;//记录结果集的尾指针

    //归并,每次取最小值进行归并
    while (list1 != null && list2 != null) {
        if (list1.val <= list2.val) {
            lastNode.next = list1;
            lastNode = list1;
            list1 = list1.next;
        } else {
            lastNode.next = list2;
            lastNode = list2;
            list2 = list2.next;
        }
    }
    //将剩下的链表部分直接插入结果集
    if (list1 != null) {
        lastNode.next = list1;
    }
    if (list2 != null) {
        lastNode.next = list2;
    }
    return resultList.next;
}

解题思路二

递归式

public ListNode Merge2(ListNode list1, ListNode list2) {
    if (list1 == null && list2 == null) {
        return null;
    } else if (list1 != null && list2 == null) {
        return list1;
    } else if (list2 != null && list1 == null) {
        return list2;
    } else {
        ListNode resultList = new ListNode(0);//存放结果集
        //找出当前两个链表最小值
        if (list1.val <= list2.val) {
            resultList.val = list1.val;
            resultList.next = Merge2(list1.next, list2);
        } else {
            resultList.val = list2.val;
            resultList.next = Merge2(list1, list2.next);
        }
        return resultList;
    }
}

你可能感兴趣的:(合并两个排序的链表)