合并两个排序的链表
题目
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
思路:
因为两个链表已经有序,递归实现。用一个新的指针来保存合并后的结果,新链表的next指向下一个较小的节点,如果是l1的节点则l1指针往后移动,如果是l2的节点则将l2的指针后移。
C++
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if (l1==nullptr && l2==nullptr)
return nullptr;
else if (l1==nullptr)
return l2;
else if (l2==nullptr)
return l1;
ListNode* res= NULL;
ListNode* p1 = l1;
ListNode* p2 = l2;
if (p1->val <= p2->val)
{
res = l1;
res->next = mergeTwoLists(l1->next,l2);
}
else
{
res = l2;
res->next = mergeTwoLists(l1,l2->next);
}
return res;
}
};
python
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
def merge(l1: ListNode, l2: ListNode) -> ListNode:
if l1 == None and l2 == None:
return None
elif l1 == None:
return l2
elif l2 == None:
return l1
if l1.val <= l2.val:
res = l1
res.next = merge(l1.next, l2)
else:
res = l2
res.next = merge(l1, l2.next)
return res
return merge(l1, l2)