剑指 Offer 25. 合并两个排序的链表
题目要求
思路
两种思路
- 重新开一个链表头,在不影响原来两链表的情况下,利用两个指针逐个比较两链表中元素的大小,然后将较小的值传递到新链表中
- 直接在两链表中比较,将其中一个链表的值插入到另一个链表中
注意:开始要判断,是否存在一个链表为空的情况
代码
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
//判空
if (!l1)
{
return l2;
}
if (!l2)
{
return l1;
}
//先确定头节点
ListNode* head = nullptr;
if(l1->val <= l2->val)
{
head = l1;
l1 = l1->next;
}
else
{
head = l2;
l2 = l2->next;
}
//再确定其他节点
ListNode* cur = head;
while(l1 && l2)
{
if(l1->val <= l2->val)
{
cur->next = l1;
l1 = l1->next;
}
else
{
cur->next = l2;
l2 = l2->next;
}
cur = cur->next;
}
if(l1)
{
cur->next = l1;
}
if(l2)
{
cur->next = l2;
}
return head;
}
};