题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。例如输入图中的链表1和链表2,则合并之后的升序链表3所示。
(a)如果链表1头结点的值小于链表2头结点的值,那么链表1的头结点将是合并后链表的头结点。如果链表2头结点的值小于链表1的头结点的值,那么链表2的头结点将是合并后链表的头结点.
(b)我们继续合并两个链表中剩余的结点,由于两个链表剩余结点依然是排序的,因此合并这两个链表的步骤和前面的步骤是一样的,但需要把两个链表中的较小值的头结点链接到合并后链表的尾结点的后面。
接下来我们来解决鲁棒性的问题。1)如果第一个链表为空,那么合并的结果是第二个链表;2)如果第二个链表为空,那么合并的结果是第一个链表;3)如果两个链表都是空链表,合并的结果是一个空链表。
public ListNode Merge(ListNode pHead1,ListNode pHead2){
if(pHead1 == null)
return pHead2;
else if(pHead2 == null)
return pHead1;
ListNode pMergedHead = null;
if(pHead1.data <pHead2.data){
pMergedHead = pHead1;
pMergedHead.next = Merge(pHead1.next ,pHead2);
}else{
pMergedHead = pHead2;
pMergedHead.next = Merge(pHead1,pHead2.next);
}
return pMergedHead;
}