已知两个链表list1 和list2 内的数据都是有序的,请把它们合并成一个链表,保持里面的数据依然有序,要求用递归的方法实现()。下面是定义的链表的节点:
struct Node {
int data;
Node *next;
};
typedef struct Node Node; 请写出函数Node * MergeRecursive(Node *head1, Node *head2)的实现。
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
// 递归的结束条件(递归出口),也就是某一个链表被遍历到最后一个节点
if(l1 == null)
return l2;
if(l2 == null)
return l1;
// 值小的连接到大的值大的那一个链表后面
if(l1.val < l2.val){
// 就是如果l1的值小于l2的节点值,就找l1的下一个节点进行递归比较插入到l2,因为是都是有序链表
l1.next = mergeTwoLists(l1.next, l2);
// 将l1返回为了判断l1是否遍历完
return l1;
}else{
l2.next = mergeTwoLists(l1, l2.next);
return l2;
}
}
def Merge(self, pHead1, pHead2):
if pHead1 == None:
return pHead2
if pHead2 == None:
return pHead1
pMergeHead = None
if pHead1.val < pHead2.val:
pMergeHead = pHead1
pMergeHead = self.Merge(pHead1.next, pHead2)
else:
pMergeHead = pHead2
pMergeHead = self.Merge(pHead1, pHead2.next)
return pMergeHead