此demo是有头节点的单链表
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
int data;
struct Node *next;
} Node;
Node *initList()
{
Node *list = (Node *)malloc(sizeof(Node)); // list 头结点
list->data = 0;
list->next = NULL;
return list;
}
void headInsert(Node *list, int data)
{
Node *node = (Node *)malloc(sizeof(Node));
node->data = data;
node->next = list->next;
list->next = node;
list->data++;
}
void tailInsert(Node *list, int data)
{
Node *head = list;
Node *node = (Node *)malloc(sizeof(Node));
node->data = data;
node->next = NULL;
list = list->next;
while (list->next != NULL)
{
list = list->next;
}
list->next = node;
head->data++;
}
void delete(Node *list, int data)
{
Node *pre = list;
Node *current = list->next;
while (current != NULL)
{
if (current->data == data)
{
pre->next = current->next;
free(current);
break;
}
pre = current;
current = current->next;
}
list->data--;
}
void printList(Node *list)
{
list = list->next;
while (list != NULL)
{
printf("%-5d", list->data);
list = list->next;
}
printf("\n");
}
int main(int argc, char const *argv[])
{
Node *list = initList();
for (int i = 0; i <= 100; i++)
{
headInsert(list, i);
}
delete (list, 100);
delete (list, 0);
delete (list, 50);
printList(list);
return 0;
}