编辑代码

#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");
}