对于给定的两个链表本身是有序的,我们可以逐个向前对比两个链表L1和L2的节点大小,选择其中节点值小的链接到新的链表上,然后当前链表节点和选中的链表的下一个节点继续比较,直到两个链表中的任何一个遍历完毕,再将另一个没有遍历完的链表节点直接连接到新的链表上。(两个链表长度可能不一致,所以最后需要判断)。
代码如下:
class Solution {
public:
/**
*
* @param l1 ListNode类
* @param l2 ListNode类
* @return ListNode类
*/
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
// write code here
if(l1==nullptr&&l2==nullptr) return nullptr;
ListNode* head=new ListNode(-1);
ListNode* res=head;
while(l1!=nullptr&&l2!=nullptr)
{
if(l1->val<l2->val)
{
head->next=l1;
l1=l1->next;
}
else
{
head->next=l2;
l2=l2->next;
}
head=head->next;
}
if(l1!=nullptr)
head->next=l1;
if(l2!=nullptr)
head->next=l2;
return res->next;
}
};