侵入时双向链表不需要单独进行内存分配跟随具体结构进行分配详细数据结构typedef structure list_node { struct list_node *next; struct list_node *prev; } list_t;链表初始化初始化链表哨兵自己成环。list-next list; list-prev list尾插将节点node插到list之后这里需要注意先操作node节点否则会破坏链表结构node的后继指针指向list节点的下一个节点node的前驱指针指向list节点list节点的后继指针指向nodelist的下一个节点的前驱指针指向node。node-next list-next; node-prev list; list-next-prev node; list-next node;头插将节点node插到list之前这里需要注意先操作node节点node的前驱指针指向list的上一个节点node的后继指针指向listlist的上一个节点的后继节点指向nodelist的前驱指针指向node。node-prev list-prev; node-next list; list-prev-next node; list-prev node;移除将该节点指向自己成环并将node的前后两个节点连接起来并将自己设置成环。node-prev-next node-next; node-next-prev node-prev; node-prev node; node-next node;判断链表是否为空通过判断list的后继指针是否指向自己也就是当前哨兵是否指向自己。list-next list