剑指offer55

233 阅读1分钟

题目描述

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

解题思路分析

这个题目很简单,可以使用递归,也可以使用循环

代码实现

//递归版本
public ListNode merge(ListNode list1, ListNode list2) {
    if (list1 == null) {
        return list2;
    } else if (list2 == null) {
        return list1;
    }
    ListNode merge = null;
    if (list1.val < list2.val) {
        merge = list1;
        merge.next = merge(list1.next, list2);
    } else {
        merge = list2;
        merge.next = merge(list1, list2.next);
    }
    return merge;
}
//循环版本
public ListNode merge(ListNode list1, ListNode list2) {
    if (list1 == null) {
        return list2;
    } else if (list2 == null) {
        return list1;
    }
    ListNode merge = null;
    ListNode mergeHead = null;
    ListNode head1 = list1, head2 = list2;
    while (head1 != null && head2 != null) {
        if (head1.val < head2.val) {
            if (mergeHead == null) {
                mergeHead = merge = head1;
            } else {
                merge.next = head1;
                merge = merge.next;
            }
            head1 = head1.next;
        } else {
            if (mergeHead == null) {
                merge = head2;
                mergeHead = merge;
            } else {
                merge.next = head2;
                merge = merge.next;
            }
            head2 = head2.next;
        }
    }
    if (head1 != null) {
        merge.next = head1;
    }
    if (head2 != null) {
        merge.next = head2;
    }
    return mergeHead;
}