【力扣leetcode】在链表中插入最大公约数

67 阅读1分钟

题目

给你一个链表的头 head ,每个结点包含一个整数值。

在相邻结点之间,请你插入一个新的结点,结点值为这两个相邻结点值的 最大公约数 。

请你返回插入之后的链表。

两个数的 最大公约数 是可以被两个数字整除的最大正整数。

解题思路

直接用的数组,默认head是数组。

// 获取最大公约数
var getMax = function (a, b) {
  return a % b === 0 ? b : getMax(b, a % b);
};
getMax(6, 18);
// 用来存放最大公约数
let stack = [];
var insertGreatestCommonDivisors = function (head) {
  // 变量数组
  for (let i = 0; i < head.length - 1; i++) {
    const j = getMax(head[i], head[i + 1]);
    stack.push(j);
  }

  for (let i = 0; i < stack.length; i++) {
    // 公约数存放的位置是 2i+1
    head.splice(2 * i + 1, 0, stack[i]);
  }
};
insertGreatestCommonDivisors([18, 6, 10, 3, 9]);