本文主要是介绍T46,今天很勇敢,申请完很激动,不知道能不能收到回信,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
(1)使用辅助数组q记录链表中已出现的值,那么只需要对链表扫描一次
|data|<n,q的大小为n+1即可,各元素的初值均为0。依次扫描链表各节点,同时检查q[data],为0则保留该节点,并令q[data]=1;否则该节点从链表中删除.
(2)
typedef struct node{int data;struct node *link;
}NODE;
typedef NODE *PNODE;
(3)
void func(PNODE h,int n){PNODE p=h,r;int* q,m;// 申请n+1个空间q=(int*)malloc(sizeof(int)*(n+1));// 数组元素初始化为0for (int i=0; i<n+1; i++) {*(q+m)=1;}while (p->link!=NULL) {m=p->link->data>0?p->link->data:-p->link->data;// 判断该节点data是否出现if (*(q+m)==0) {// 首次出现,保留*(q+m)=1;p=p->link;}else { // 重复出现// 删除r=p->link;p->link=r->link;free(r);}free(q);}
}
(4)时间复杂度为O(N)
空间复杂度为O(N)
这篇关于T46,今天很勇敢,申请完很激动,不知道能不能收到回信的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!