源码
#include <stdio.h>
#include <stdlib.h>
typedef int E;
struct ListNode {
E element;
struct ListNode * next;
};
typedef struct ListNode * Node;
void initList(Node node) {
node->next = NULL;
}
_Bool insertList(Node head, E element, int index) {
if (index < 1) return 0;
while (--index) {
head = head->next;
if (head == 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;
}
int deleteList(Node head, int index) {
if (index < 1) return 0;
while (--index) {
head = head->next;
if (head == NULL) return 0;
}
if (head->next == NULL) return 0;
Node tem = head->next;
head->next = head->next->next;
free(tem);
return 1;
}
E * getListElement(Node head, int index) {
if (index < 1) return 0;
do {
head = head->next;
if (head == NULL) return 0;
} while (--index);
return &head->element;
}
int findListElement(Node head, E element) {
head = head->next;
int i = 1;
while (head) {
if (head->element == element) return i;
head = head->next;
i++;
}
return -1;
}
int sizeList(Node head) {
int i = 0;
while (head->next) {
head = head->next;
i++;
}
return i;
}
void printList(Node head) {
while (head->next) {
head = head->next;
printf("%d ", head->element);
}
printf("\n");
}
int main(void) {
struct ListNode head;
initList(&head);
printf("%d \n", sizeList(&head));
for (int i = 0; i < 4; i++) {
insertList(&head, i + 1, 1);
}
deleteList(&head, 1);
printList(&head);
printf("%d \n", findListElement(&head, 4));
printf("%d \n", sizeList(&head));
}