21.合并两个有序链表

题目

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

解答:

我们拿到题目首先注意到的是,有序,并且这两个链表的长度是不定的,所以有可能出现的情况是:一个链表为空,另外一个链表是4个长度。 这些细节我们在分析问题的时候都需要考虑到。

既然是有序链表,我们就需要比较两个数值的大小来决定谁排在前面。我们可以把这个问题当成数组的问题,那么我们就需要重新设定一个新的数组,然后遍历这两个有序数组,然后小的存进新的数组。

而在链表中,我们需要先设定一个头结点,然后就相当于是定义了一个新的链表。我们把值一个一个往里面装就可以了,最后需要考虑的问题的是:链表的长度不一致的时候,我们需要把我们的新的链表指向还不为空的那个链表。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public int val;
 *     public ListNode next;
 *     public ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode MergeTwoLists(ListNode l1, ListNode l2) {
        ListNode head = new ListNode(0);
        ListNode p = head;
        while(l1 != null && l2 != null)
        {
            if(l1.val <= l2.val)
            {
                p.next = l1; 
                l1 = l1.next;
            }
            else
            {
                p.next = l2;
                l2 = l2.next;
            }
            p = p.next;
        }
        if(l1 != null)
            p.next = l1;
        if(l2 != null)
            p.next = l2;
        return head.next;
    }
}

参考:【LeetCode021】合并有序链表

原文地址:https://www.cnblogs.com/zhang-mo/p/10860754.html