#include <stdio.h>
#include "windows.h"
typedef int E;
struct ListNode {
E element;
struct ListNode *Next;
};
typedef struct ListNode *Node;
void initList(Node node) {
node->Next = NULL;
}
BOOL insetList(Node head, E element, int index) {
if (index < 0) return 0;
index++;
while (--index) {
head = head->Next;
if (head->Next == NULL) return 0;
}
Node node = malloc(sizeof(struct ListNode));
if (node == NULL) return 0;
node->element = element;
node->Next = head->Next;
head->Next = node;
return 1;
}
BOOL delList(Node head, int index) {
if (index < 0) return 0;
index++;
while (--index) {
head = head->Next;
if (head->Next == NULL) return 0;
}
if (head->Next == NULL) return 0;
Node tmp = head->Next;
head->Next = head->Next->Next;
free(tmp);
return 1;
}
E *getList(Node head, int index) {
if (index < 0) return NULL;
index++;
do {
if (head->Next == NULL)return NULL;
head = head->Next;
} while (--index);
return &head->element;
}
int findList(Node head, E element) {
int index = 0;
do {
head = head->Next;
if (head->element == element) return index;
if (head->Next == NULL) return -1;
index++;
} while (1);
}
void f(Node head) {
do {
if (head->Next == NULL) {
printf("\n");
return;
}
head = head->Next;
printf("%d ", head->element);
} while (1);
}
int main() {
struct ListNode head;
initList(&head);
for (int i = 1; i < 6; ++i) {
insetList(&head, i * 100, 0);
}
f(&head);
delList(&head, 3);
f(&head);
int a = *getList(&head, 3);
printf("%d\n", a);
a = findList(&head, 100);
printf("%d\n", a);
};