单链表实现增删改查
#include"stdio.h"
typedef struct node
{
int id;
struct node* next;
}NODE;
NODE *init()
{
NODE* p = (NODE*)malloc(sizeof(NODE));
p->id = 0;
p->next = NULL;
return p;
}
void insert(NODE* head, int data)
{
NODE* p = (NODE*)malloc(sizeof(NODE));
p->id = data;
p->next = head->next;
head->next = p;
}
void print2(NODE*head)
{
if (head->next != NULL)
{
print2(head->next);
printf("%d\t", head->next->id);
}
}
void find2(NODE* head, int val)
{
if (head->next != NULL)
{
if (head->next->id == val)
{
printf("%d\t", head->next->id);
return;
}
find2(head->next,val);
}
}
void del(NODE*head,int val)
{
NODE* p1 = head->next;
NODE* p2 = head;
while (p1 != NULL)
{
if (p1->id == val)
{
p2->next = p1->next;
free(p1);
return;
}
p1 = p1->next;
p2 = p2->next;
}
}
void change(NODE* head, int val,int data)
{
if (head->next != NULL)
{
if (head->next->id == val)
{
head->next->id = data;
return;
}
change(head->next, val, data);
}
}
void clear(NODE* head)
{
NODE* p = head->next;
while (p->next != NULL)
{
head->next = p->next;
free(p);
p = head->next;
}
}
void clear2(NODE* head)
{
if (head->next != NULL)
{
clear2(head->next);
free(head->next);
}
}
void insert2(NODE* head,int data)
{
NODE* p = (NODE*)malloc(sizeof(NODE));
p->id = data;
NODE* q = head;
while (q->next != NULL)
{
q = q->next;
}
p->next = q->next;
q->next = p;
}
void insertAfter(NODE* head,int val,int data)
{
NODE* q = (NODE*)malloc(sizeof(NODE));
q->id = data;
NODE* p1 = head->next;
NODE* p2 = head;
while (p1->next != NULL)
{
if (p1->id == val)
{
q->next = p1->next;
p1 = p2->next;
p1->next = q;
return;
}
p1 = p1->next;
p2 = p2->next;
}
}
int main()
{
NODE *head = init();
for (int i = 0; i < 5; i++)
{
insert(head, i + 1);
}
print2(head);
printf("\n");
insertAfter(head, 4, 2);
print2(head);
return 0;
}