文章

61

粉丝

0

获赞

0

访问

3.5k

头像
2015年计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年6月30日 19:35
阅读数 15

⑴ 算法的基本设计思想(3分)

为了在时间复杂度上尽可能高效,我们采用以下策略:

  1. 使用辅助空间(哈希表)记录已出现的绝对值: 创建一个哈希表(或布尔数组),大小为 n+1,用来标记每个绝对值是否已经出现过。这里利用了题目中 |data|≤n 的条件,确保可以使用大小为 n+1 的数组来记录。

  2. 遍历链表,处理每个结点: 从链表头开始,逐个结点遍历。

    • 如果当前结点的 data 绝对值在哈希表中未被标记,则保留该结点,并在哈希表中标记该绝对值。
    • 如果当前结点的 data 绝对值在哈希表中已被标记,则删除该结点。
  3. 注意删除操作的指针维护: 在删除结点时,需要正确地维护链表的指针,确保链表不会断裂。因此,需要记录当前结点的前驱结点。

(2)

typedef struct Node{
  int data;
  struct Node *next;
}Node,*Linklist

 (3)

#include <iostream>
#include <cmath> // for abs()
#include <vector> // for boolean vector

using namespace std;

void removeDuplicateAbs(LinkedList &head, int n) {
    if (head == nullptr || head->next == nullptr) return; // 链表为空或只有一个结点,无需处理

    vector<bool> appeared(n + 1, false); //  哈希表(布尔数组),标记绝对值是否出现
    Node *curr = head;       // 当前结点
    Node *prev = nullptr;   // 前驱结点

    while (curr != nullptr) {
        int absData = abs(...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发