题解 | #合并两群能量值#

合并两群能量值

https://www.nowcoder.com/practice/d728938f66ac44b5923d4f2e185667ec

大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。

题目考察的知识点

这道题目考察的是链表的合并和排序,需要注意链表的有序性。

题目解答方法的文字分析

我们可以使用合并排序的思想来合并这两个非递增链表。通过比较两个链表的当前节点,逐步选择较大的节点放入新链表中,直到其中一个链表为空。

具体步骤如下:

  1. 创建一个新链表的头节点 dummy,以及一个指向新链表当前节点的指针 cur,初始时两者都指向 nullptr
  2. 使用一个循环遍历两个链表,比较当前节点的值,选择较大的节点添加到新链表中,并将指针移动到下一个节点。
  3. 循环结束后,可能其中一个链表还没有遍历完,将剩余的节点连接到新链表的末尾。
  4. 返回新链表的头节点 dummy->next,即为结果链表。

本题解析所用的编程语言

C++

完整且正确的编程代码

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
public:
    ListNode* mergeEnergyValues(ListNode* l1, ListNode* l2) {
        ListNode* dummy = new ListNode(-1); // 创建一个虚拟头节点
        ListNode* cur = dummy; // 当前节点指针

        // 合并排序
        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 dummy->next; // 返回新链表的头节点
    }
};

这个代码使用合并排序的思想,通过遍历两个非递增链表,比较当前节点的值并选择较大的节点添加到新链表中。最后,将剩余的节点连接到新链表的末尾,得到合并后的非递增链表。

您的关注、点赞、收藏就是我创作的动力,三连支持阿Q!

阿Q的题解 文章被收录于专栏

阿Q秋招刷过的题

全部评论

相关推荐

去B座二楼砸水泥地:不过也可以理解,这种应该没参加过秋招
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务