【简单】面试题 02.03. 删除中间节点

643 篇文章 5 订阅

【题目】
实现一种算法,删除单向链表中间的某个节点(即不是第一个或最后一个节点),假定你只能访问该节点
来源:leetcode
链接:https://leetcode-cn.com/problems/delete-middle-node-lcci/
【示例】
输入:单向链表a->b->c->d->e->f中的节点c
结果:不返回任何数据,但该链表变为a->b->d->e->f
【思路】
将给定节点node后面的那个节点的值赋予该节点
然后另node->next=node->next->next;//即跳过下一个节点
【代码】16ms 8.1MB

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    void deleteNode(ListNode* node) {
        ListNode *t=node->next;
        node->val=t->val;
        node->next=t->next;        
    }
};
实验二的题目要求利用拉格朗日插值法对给定的数据点 (x_i, y_i) 进行插值,并计算特定点 x1, x2, x3 的函数近似值。拉格朗日插值公式是: \[ P(x) = \sum_{i=0}^{n} y_i L_i(x) \] 其中 \( n \) 是数据点的数量,\( L_i(x) \) 是拉格朗日基础多项式,对于第 i 个数据点 (x_i, y_i),\( L_i(x) \) 表示: \[ L_i(x) = \prod_{j=0, j\neq i}^{n} \frac{x - x_j}{x_i - x_j} \] 对于给定的数据,首先我们需要创建这些拉格朗日多项式,然后代入 x1, x2, x3 来求出对应的函数值。 以下是使用 C 语言的基本步骤: 1. 定义一个函数 `lagrange_interpolate`,输入为数组 `x`, `y` 和需要查询的点 `x1`, `x2`, `x3`。 2. 初始化一个变量 `P` 存储结果。 3. 遍历数据点,计算每个 \( L_i(x1), L_i(x2), L_i(x3) \),并将对应乘以 y_i 加到 `P` 中。 4. 返回计算后的 `P`。 由于这是一个编写代码的问题,我将给出伪代码示例: ```c double[] x = { -3.0, -1.0, 1.0, 2.0, 3.0 }; double[] y = { 1.0, 1.5, 2.0, 2.0, 1.0 }; double interpolate_lagrange(double x1, double x2, double x3) { int n = sizeof(x) / sizeof(x[0]); double P = 0; for (int i = 0; i < n; i++) { double numerator = 1; // 计算拉格朗日系数 for (int j = 0; j < n; j++) { if (i == j) continue; numerator *= (x1 - x[j]) / (x[i] - x[j]); } P += y[i] * numerator; } return P; } // 调用插值函数并打印结果 double result_x1 = interpolate_lagrange(-2.0, 0.0, 2.75); printf("Lagrange插值在 x1=%f, x2=%f, x3=%f 处的结果是 %f\n", x1, x2, x3, result_x1); ``` 请注意,实际的 C 代码还需要处理边界条件、浮点数精度等问题。完成上述步骤后,即可得到在指定点的函数近似值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值