p40-23 以及位运算求绝对值技巧
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
typedef int ElemType;
typedef struct LNode {
ElemType data;
struct LNode *next;
} LNode, *LinkList;
//int abs(int a) {
// return (a > 0) ? a : -a;
//}
int abs(int a) {
int mask = a >> 31;
return ((a ^ mask) - mask);
}
void func(LinkList L, int n) {
int *lst = (int *) malloc(sizeof(int) * n);
memset(lst, 0, sizeof(int) * n);
LNode *p = L->next, *pre = L;
while (p != NULL) {
if (lst[abs(p->data) - 1] != 0) {
pre->next = p->next;
free(p);
p = pre->next;
} else {
lst[abs(p->data) - 1] = 1;
pre = p;
p = p->next;
}
}
free(lst);
}
int main() {
printf("%d", abs(-12));
}