文章

27

粉丝

0

获赞

0

访问

1.8k

头像
2015年计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年10月20日 11:08
阅读数 32

(1)创建大小为n+1的bool数组used[n+1],used[i]用于记录绝对值为i的数是否存在于链表中。

(2)

struct LinkedNode {

  int data;

  LinkedNode *next;

};

(3)

void solve()

{

  LinkedNode *p = head;

  while (head->next != nullptr) {

    LinkedNode *q = head->next;

    if (used[std::abs(q->data)]) {

      p->next = q->next;

      delete q;

      p = p->next;

      continue;

    }

    used[std::abs(q->data)] = true;

    p = p->next;

  }

}

(4)时间复杂度O(n),空间复杂度O(1)


评分及理由

(1)得分及理由(满分3分)

得分:3分

理由:学生的基本设计思想与标准答案一致,都采用了辅助数组记录已出现的绝对值,通过空间换时间的方法实现一趟扫描删除重复结点。思路正确完整。

(2)得分及理由(满分2分)

得分:2分

理由:单链表结点的数据类型定义正确,使用了struct定义,包含data和next指针(虽然命名为next而非link,但这不影响正确性)。

(3)得分及理由(满分8分)

得分:4分

理由:

  • 算法整体思路正确,使用了辅助数组记录绝对值是否出现过
  • 存在严重逻辑错误:在删除结点后执行了p = p->next,这会导致跳过下一个结点的检查,可能漏删结点
  • 循环条件while (head->next != nullptr)不合理,应该检查当前处理结点的下一个结...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发