#include<stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node *next;
}NODE;
NODE * creat_List_head();
int list_add_item(NODE *list, int data);
int list_delete_item(NODE *list,int num);
int list_update_item(NODE*list,int num,int new_data);
void show_list(NODE* list);
NODE *creat_List_head()
{
NODE* head = NULL;
NODE* Pnew = NULL;
head = (NODE *)malloc(sizeof(NODE));
if(NULL == head)
{
return NULL;
}
head->next = NULL;
Pnew = (NODE *)malloc(sizeof(NODE));
if(NULL == Pnew)
{
return NULL;
}
Pnew->data = 100;
Pnew->next = NULL;
head->next = Pnew;
head = Pnew;
return head;
}
int list_add_item(NODE *list, int data)
{
NODE *tail = list;
NODE* new_node = NULL;
new_node = (NODE *)malloc(sizeof(NODE));
if(NULL == new_node)
{
return -1;
}
new_node->data = data;
//带头结点的尾插法
while(tail)
{
if(NULL == tail->next)
{
new_node->next = tail->next;
tail->next = new_node;
tail = new_node;
printf("add %d\n",tail->data);
return 1;
}
tail = tail->next;
}
return 0;
}
//删除第num个节点
int list_delete_item(NODE *list,int num)
{
int i = 1;
int list_length = 0;
NODE*head = list;
NODE*delete_node = list->next;
if(num == 0)
return -1;
while(head){
if(head->next == NULL)
{
printf("not find %d\n",num);
return -1;
}
if(i == num)
{
head->next = delete_node->next;
printf("free node %d\n",num);
delete_node->next = NULL;
free(delete_node);
return 0;
}
i++;
head = head->next;
delete_node = delete_node->next;
}
return 0;
}
//修改某个节点的某个值
int list_update_item(NODE*list,int num,int new_data)
{
NODE*head = list;
int i = 1;
while(head)
{
if(num == i )
{
head->data = new_data;
return 0;
}
i++;
head = head->next;
}
return 0;
}
void show_list(NODE* list)
{
NODE*head = NULL;
printf("show all list node :");
for(head=list;head !=NULL;head = head->next )
{
printf("%d ",head->data);
}
printf("\n");
}
int main()
{
NODE *list = NULL;
list = creat_List_head();
list_add_item(list,1);
list_add_item(list,2);
list_add_item(list,3);
list_delete_item(list,9);
list_add_item(list,4);
list_delete_item(list,3);
list_add_item(list,5);
list_update_item(list,4,999);
list_add_item(list,6);
show_list(list);
return 0;
}
【C语言】带头节点的链表的增删改查示例
最新推荐文章于 2022-02-24 21:51:34 发布