考察的知识点:与链表有关的题基本都是插入,删除,交换顺序等,解决这些问题通常将链表的指针进行修改。
题目分析:这道题就是合并两个有序单链表,首先判断l1,l2是否有空,1. 若都为空,则返回空;2. 若一个为空,另一个不为空,则返回不为空的一个;3. 两个都不为空,开始遍历两个链表,比较两个结点的大小,插入大的那一个结点,若遍历某个链表为空,则将不为空的链表进行插入,否则继续遍历。
本题解析所用的编程语言:c++
ListNode* mergeEnergyValues(ListNode* l1, ListNode* l2)
{
// write code here
ListNode* head, * cur;
//先判断是否有空
if (l1 == nullptr && l2 != nullptr)
return l2;
else if (l1 != nullptr && l2 == nullptr)
return l1;
else if (l1 == nullptr && l2 == nullptr)
return nullptr;
//给head附头
if (l1->val >= l2->val)
{
head = cur = l1;
l1 = l1->next;
}
else
{
head = cur = l2;
l2 = l2->next;
}
while (l1 || l2)//两个都空结束
{
//判断遍历时是否有空
if (l1 == nullptr && l2 != nullptr)
{
cur->next = l2;
return head;
}
else if (l1 != nullptr && l2 == nullptr)
{
cur->next = l1;
return head;
}
if (l1->val >= l2->val)
{
cur->next = l1;
cur = cur->next;
l1 = l1->next;
}
else
{
cur->next = l2;
cur = cur->next;
l2 = l2->next;
}
}
cur->next = nullptr;
return head;
}

京公网安备 11010502036488号