代码:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
struct link_node
{
int num;
struct link_node * next;
};
struct link_node * initial_linklist();
void reverse_linklist(struct link_node * pHeader);
void insert_linklist(struct link_node * pHeader, int olddata, int newdata);
void delete_linklist(struct link_node * pHeader, int olddata);
void print_linklist(struct link_node * pHeader);
void clean_linklist(struct link_node * pHeader);
void destroy_linklist(struct link_node * pHeader);
struct link_node * initial_linklist()
{
struct link_node * pHeader = malloc(sizeof(struct link_node));
if(pHeader == NULL) return NULL;
return pHeader;
};
void reverse_linklist(struct link_node * pHeader)
{
if(pHeader == NULL)
{
return;
}
struct link_node * pPrv = NULL;
struct link_node * pCurrent = pHeader->next;
struct link_node * pNext = NULL;
while (pCurrent != NULL)
{
pNext = pCurrent->next;
pCurrent->next = pPrv;
pPrv = pCurrent;
pCurrent = pNext;
}
pHeader->next = pPrv;
};
void print_linklist(struct link_node * pHeader)
{
if(pHeader == NULL)
{
return;
}
struct link_node * pCurrent = pHeader->next;
while (pCurrent != NULL)
{
printf("%d\n",pCurrent->num);
pCurrent = pCurrent->next;
}
};
void insert_linklist(struct link_node * pHeader, int olddata, int newdata)
{
if(pHeader == NULL)
{
return;
}
struct link_node * pPrv = pHeader;
struct link_node * pCurrent = pHeader->next;
while (pCurrent != NULL)
{
if(pCurrent->num == olddata) break;
pPrv = pCurrent;
pCurrent = pCurrent->next;
}
struct link_node * pNewlink = malloc(sizeof(struct link_node));
pNewlink->num = newdata;
pNewlink->next = pCurrent;
pPrv->next = pNewlink;
}
void delete_linklist(struct link_node * pHeader, int olddata)
{
if(pHeader == NULL)
{
return;
}
struct link_node * pPrv = pHeader;
struct link_node * pCurrent = pHeader->next;
while (pCurrent != NULL)
{
if(pCurrent->num == olddata) break;
pPrv = pCurrent;
pCurrent = pCurrent->next;
}
pPrv->next = pCurrent->next;
free(pCurrent);
};
void clean_linklist(struct link_node * pHeader)
{
if(pHeader == NULL)
{
return;
}
struct link_node * pCurrent = pHeader->next;
while (pCurrent != NULL)
{
pHeader->next = pCurrent->next;
free(pCurrent);
pCurrent = pHeader->next;
}
pHeader->next = NULL;
};
void destroy_linklist(struct link_node * pHeader)
{
if(pHeader == NULL)
{
return;
}
clean_linklist(pHeader);
free(pHeader);
pHeader = NULL;
};
void main(void * argc, void * argv[])
{
struct link_node * pHeader = initial_linklist();
printf("inser 3 nodes\n");
insert_linklist(pHeader, -1, 10);
insert_linklist(pHeader, -1, 20);
insert_linklist(pHeader, -1, 30);
print_linklist(pHeader);
printf("inser more 3 nodes\n");
insert_linklist(pHeader, 10, 100);
insert_linklist(pHeader, 20, 200);
insert_linklist(pHeader, 30, 300);
print_linklist(pHeader);
printf("remove 3 nodes\n");
delete_linklist(pHeader, 100);
delete_linklist(pHeader, 20);
delete_linklist(pHeader, 30);
print_linklist(pHeader);
printf("clean link nodes\n");
clean_linklist(pHeader);
print_linklist(pHeader);
printf("insert 3 nodes\n");
insert_linklist(pHeader, -1, 10);
insert_linklist(pHeader, -1, 20);
insert_linklist(pHeader, -1, 30);
print_linklist(pHeader);
printf("destroy link\n");
destroy_linklist(pHeader);
pHeader = NULL;
print_linklist(pHeader);
printf("try to add node after destroy link\n");
insert_linklist(pHeader, -1, 10);
printf("try to print node after destroy link\n");
print_linklist(pHeader);
}
结果: