(1)无头单链表
#include <stdio.h>
#include <stdlib.h>
typedef struct person
{
int age;
struct person *next;
}per;
per *head_list(per *one,int num) //头插
{
per *temp = (per *)malloc(sizeof(per));
temp->age = num;
temp->next = one;
return temp;
}
void show(per *head)
{
if(NULL == head)
{
return;
}
while(head)
{
printf("age is %d\n",head->age);
head = head->next;
}
}
void delete_node(per *head, int n) //删除节点
{
per *past = head;
per *curr = past;
while(curr)
{
if(n == curr->age)
{
past->next = curr->next;
free(curr);
curr = NULL;
}
else
{
past = curr;
curr = curr->next;
}
}
}
int main()
{
per *head = NULL;
head = head_list(head,10);
head = head_list(head,20);
head = head_list(head,30);
head = head_list(head,40);
head = head_list(head,50);
show(head);
printf("====================\n");
delete_node(head,30);
show(head);
return 0;
}
(2)有头单链表
#include <stdio.h>
#include <stdlib.h>
typedef struct person
{
int age;
struct person *next;
}per;
per *tail_list(per *one, int num) //尾插
{
per *temp = (per *)malloc(sizeof(per));
temp->age = num;
per *head = one->next;
while(one->next)
{
one = one->next;
}
one->next = temp;
return head;
}
void show(per *head)
{
if(NULL == head)
{
return;
}
while(head->next)
{
printf("age is %d\n",head->next->age);
head = head->next;
}
}
void delete_node(per *head, int n) //删除节点
{
per *past = head;
per *curr = past->next;
while(curr)
{
if(n == curr->age)
{
past->next = curr->next;
free(curr);
curr = NULL;
}
else
{
past = curr;
curr = curr->next;
}
}
}
int main()
{
per head;
head.next = NULL;
tail_list(&head,10);
tail_list(&head,20);
tail_list(&head,30);
tail_list(&head,40);
tail_list(&head,50);
show(&head);
printf("=====================\n");
delete_node(&head, 20);
show(&head);
return 0;
}