欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > 2807. 在链表中插入最大公约数

2807. 在链表中插入最大公约数

2025/11/17 20:52:06 来源:https://blog.csdn.net/makeke123456/article/details/145248048  浏览:    关键词:2807. 在链表中插入最大公约数

在本篇博客文章中,我们将探讨如何实现一个算法,该算法可以在链表中相邻节点之间插入一个新的节点,新节点的值为相邻两个节点值的最大公约数(GCD)。这个问题是 LeetCode 上的一个中等难度问题,涉及到链表操作和最大公约数的计算。

问题描述

解题思路

理解问题

首先,我们需要理解问题的核心:在链表的相邻节点之间插入新节点,新节点的值为相邻节点值的最大公约数。

计算最大公约数

我们需要一个函数来计算两个数的最大公约数。这可以通过欧几里得算法实现,该算法基于这样一个事实:两个整数的最大公约数等于其中较小的数和两数相除余数的最大公约数。

链表操作

我们需要遍历链表,找到相邻的节点对,并在它们之间插入新节点。这涉及到创建新节点、更新指针等操作。

实现代码

以下是实现这个算法的 C++ 代码:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* insertGreatestCommonDivisors(ListNode* head) {ListNode* curr = head;while (curr->next!= nullptr) {// 创建新节点存储最大公约数ListNode* newNode = new ListNode(gcd(curr->val, curr->next->val));// 保存下一个节点ListNode* nextNode = curr->next;// 插入新节点curr->next = newNode;newNode->next = nextNode;// 移动到下一组节点curr = nextNode;}return head;}};

代码解释

  1. 计算最大公约数gcd 函数使用欧几里得算法计算两个数的最大公约数。

  2. 在链表中插入最大公约数

    • 创建一个虚拟头节点 dummy,简化边界情况处理。

    • 遍历链表,对于每一对相邻节点,计算它们的最大公约数,并创建一个新节点。

    • 将新节点插入到相邻节点之间。

    • 更新 curr 指针,继续处理下一对相邻节点。

  3. 返回结果:返回插入新节点后的链表头节点。

总结

通过计算最大公约数和进行链表操作,我们可以在链表中相邻节点之间插入新节点,新节点的值为相邻节点值的最大公约数。这种方法不仅代码简洁,而且能够有效地解决问题。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词