1.算法思路:创建一个大小为n的数组showtime,标记绝对值出现的次数,并且初试化为0;遍历指针p,以及p的前驱指针pre。遍历单链表,求链表节点绝对值x,以x为下标查找showtime中的值,若showtime[x]=0,则修改showtime[x]为1,并继续遍历若showtime[x]=1时要删除p指针指向的节点。
2.单链表节点的数据类型定义:
typedef struct LNode{
int data;
struct LNode* next;
}LNode,*LinkList;
3.
LinkList Del_jueduizhi(LinkList L,int n) {
vector<int> showtime(n+1, 0);
LNode *p = L->next, *pre = L;
while (p)
{
if (showtime[abs(p->data)] == 0) {
showtime[abs(p->data)] = 1;
pre = p;
p = p->next;
}
else
{
pre->next = p->next;
free(p);
p = pre->next;
}
}
return L;
}
int main() {
cout <<