通过万岁!!!
- 题目:给你一个链表,然后在链表中间插入一个节点,节点的val是前后两个节点的最大公约数。
- 思路:我是用的双指针解决的,我们首先是找到前后两个节点,然后求他的最大公约数,然后left的next指向新的节点,新节点的next指向right。然后更新left和right就好了。题目还是比较简单的。
- 技巧:双指针
java代码
class Solution {
public ListNode insertGreatestCommonDivisors(ListNode head) {
ListNode left = head;
ListNode right = left.next;
while (right != null) {
ListNode addNode = new ListNode(calculateGCD(left.val, right.val));
left.next = addNode;
addNode.next = right;
left = right;
right = left.next;
}
return head;
}
private int calculateGCD(int a, int b) {
if (b == 0) {
return a; // 如果其中一个数等于零,则返回非零数作为结果
} else {
return calculateGCD(b, a % b); // 不断地将较小的数与余数进行比较直到余数为零
}
}
}
- 总结:题目不是特别难,但是这个求最大公约数的方法还是要记一下的,之前确实也没遇到过。