文章

75

粉丝

0

获赞

0

访问

3.2k

头像
2015年计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年8月3日 18:47
阅读数 21

(1)

  1. 初始化标记数组:由于 |data| ≤ n,创建一个大小为 n+1 的数组 seen,初始时所有元素为 0

  2. 遍历链表:

    • 对当前节点的 data 取绝对值 abs_data

    • 如果 seen[abs_data] 为0,说明该绝对值是第一次出现,保留该节点,并将 seen[abs_data] 设为1。

    • 如果 seen[abs_data] 为 1,说明该绝对值已经出现过,删除当前节点。

(2)typedef struct LinkNode{

int data;

struct LinkNode * link;

}LinkNode,*LinkList;

(3)int abs(int x){ return x>=0?x:-x;}//求x的绝对值

void delete(LinkList &L,int n){

LinkNode *p = L->link;

int *seen = (int *)malloc(sizeof(int)*(n+1));

while(p!=NULL){

data = abs(p->data); //对结点data取绝对值

if(seen[data]==0){

seen[data] = 1;

p=p->link;

}else{

p->link = p->link->link;

p=p->Link;

}

}

}

(4)时间复杂度:O(n) 空间复杂度:O(n)


评分及理由

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

得分:3分

理由:学生的设计思想与标准答案完全一致,清晰地描述了使用辅助数组记录已出现的绝对值,并通过一趟扫描删除重复节点。思路正确且表述清晰。

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

得分:2分

理由:学生的单链表结点数据类型定义与标准答案一致,使用了typedef和结构体,完全符合题目要求。

...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发