编辑代码

#include <stdio.h>
typedef struct _ListNode
{
    uint8_t flag;
    void (*callback)(void);
    struct _ListNode* next;
}ListNode;

// 链表头指针
static ListNode* head_handle = NULL;

void List_init(ListNode* handle, void(*callback)(void))
{
  handle->callback = callback;
  handle->flag = 0x00;
  InsertNodeToTail(handle);
}

// 传感器开始(往链表添加节点)
void InsertNodeToTail(ListNode* handle)
{
	ListNode* target = head_handle;
	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 *needDeleteNode)
{
	ListNode *target = head_handle;	//定义一个临时的节点,用来遍历

	while(target)
	{
		if(target == needDeleteNode)//如果被删除的节点正好是头结点指向的那一个节点
		{
			target->next = needDeleteNode->next;//直接让头节点指向被删除节点的下一个节点
			return;//返回
		}
		else
		{
			target = target->next;
		}
	}
}

// 传感器处理(遍历链表)
void List_Handle(void)
{
	ListNode* target = head_handle;
	while(target != NULL)
	{
		target->callback();
		target = target->next;
	}
}


int main () {
    //JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 ListNode list0={};
    printf("Hello world!     - c.jsrun.net.");
    return 0;
}