#include <stdio.h>
#include "stdint.h"
typedef struct _ListNode
{
uint8_t flag;
void (*callback)(unsigned char);
struct _ListNode* next;
}ListNode;
static ListNode *head_handle = NULL;
void ListNode_init(ListNode **head,ListNode *handle, void(*callback)(unsigned char),unsigned char vale)
{
handle->callback = callback;
handle->flag = vale;
InsertNodeToHead(head,handle);
}
void InsertNodeToHead(ListNode **head,ListNode* handle)
{
handle->next = *head;
*head = handle;
}
void InsertNodeToTail(ListNode**head,ListNode* handle)
{
ListNode* target = *head;
if(head_handle == NULL)
{
head_handle = handle;
handle->next = NULL;
}
else
{
while(target->next != NULL)
{
if(target == handle)
{
break;
}
target = target->next;
}
target->next = handle;
handle->next = NULL;
}
}
void RemoveNode(ListNode **head,ListNode *handle)
{
ListNode *target = *head;
if(head_handle == handle)
{
head_handle = handle->next;
printf("^^^^^\r\n");
return;
}
while(target)
{
if(target->next == handle)
{
target->next = handle->next;
printf("....\r\n");
return;
}
else
{
target = target->next;
printf("***\r\n");
}
}
}
void List_Handle(ListNode**head)
{
ListNode* target = *head;
while(target != NULL)
{
target->callback(*(target->flag));
target = target->next;
}
}
void List0_callback(unsigned char vale)
{
printf("List0_callback %d\r\n",vale);
}
void List1_callback(unsigned char vale)
{
printf("List1_callback %d\r\n",vale);
}
void List2_callback(unsigned char vale)
{
printf("List2_callback %d\r\n",vale);
}
void List3_callback(unsigned char vale)
{
printf("List3_callback %d\r\n",vale);
}
int main()
{
ListNode List0,List1,List2,List3,List4;
printf("this\r\n");
ListNode_init(&head_handle,&List0,List0_callback,0);
ListNode_init(&head_handle,&List1,List1_callback,1);
ListNode_init(&head_handle,&List2,List2_callback,2);
ListNode_init(&head_handle,&List3,List3_callback,3);
ListNode_init(&head_handle,&List4,List1_callback,4);
List_Handle(&head_handle);printf("\r\n");
RemoveNode(&head_handle,&List2);
List_Handle(&head_handle);printf("\r\n");
}