文章
75
粉丝
0
获赞
0
访问
3.2k
(1)
初始化标记数组:由于 |data| ≤ n
,创建一个大小为 n+1
的数组 seen
,初始时所有元素为 0。
遍历链表:
对当前节点的 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和结构体,完全符合题目要求。
...
登录后发布评论
暂无评论,来抢沙发