合并两排序链表

题目描述

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

如上图所示,将链表1和链表2合并的结果就是链表3.即合并后的链表单调不减.

解题思路:

如图,首先比较p1,p2两个链头节点,将数值小的节点作为新的链表的头结点,然后将p1的第二个节点作为链头与p2进行比较,较小的作为新链的第2个节点,如此反复,这种情况很容易想到使用递归方式来解.

示例代码


    static class ListNode {
        int val;
        ListNode next;

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

    }


    public static ListNode merge(ListNode list1, ListNode list2) {
        if (list1 == null) {
            return list2;
        }
        if (list2 == null) {
            return list1;
        }

        ListNode head;
        if (list1.val < list2.val) {
            list1.next = merge(list1.next, list2);
            head = list1;
        } else {
            list2.next = merge(list1, list2.next);
            head = list2;
        }

        return head;
    }

这里需要注意的是特殊值的处理,即当一个空链表与另一个非空链表进行合并时,只需要返回非空链表即可.

posted @ 2018-11-08 10:48  静致远  阅读(151)  评论(0编辑  收藏  举报