题目
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入: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;
}
}