diff --git a/code_link_2015.cpp b/code_link_2015.cpp new file mode 100644 index 0000000..84351af --- /dev/null +++ b/code_link_2015.cpp @@ -0,0 +1,44 @@ +#include +#include +#include + +typedef struct node { + int data; + struct node* link; +}NODE; + +void create(NODE* p, int a[], int pos, int length) { + if (pos < length) { + p->data = a[pos]; + p->link = (NODE*)malloc(sizeof(NODE)); + p->link->data = INT_MIN;//用INT_MIN作为结束标志 + create(p->link, a, pos + 1, length); + } +} + +void deleteNode(NODE* p, int n, int length) { + int* a = (int*)malloc(sizeof(int) * (n + 1)); + memset(a, 0, sizeof(int) * (n + 1)); + NODE* pHead = p, * q; + a[p->data > 0 ? p->data : -p->data] = 1; + while (p->link != NULL && p->link->data != INT_MIN) { + int t = (p->link->data) > 0 ? p->link->data : -p->link->data; + if (a[t] == 1) { + q = p->link; + p->link = q->link; + free(q); + } + else { + a[t] = 1; + p = p->link; + } + } +} + +int main() { + int a[] = { -5,5,9,17,5,5,5,-3,2,5 }; + NODE pStart; + create(&pStart, a, 0, 10); + deleteNode(&pStart, 100, 10); + return 0; +} \ No newline at end of file