1双向链表
链表的操作有 链表的操作有 头插法、尾插法、遍历链表、查询结点、删除结点、指定位置添加结点、移动结点,注意 结点的前驱和后继。
结构体:双向链表有前驱prev和后继next
typedef struct double_node
{
char data[DATA_LEN];
struct double_node *next;
struct double_node *prev;
} node, *link_n;
1.1普通双向链表
创建结点:
link_n Creat_Head_Node()
{
link_n new_node = (link_n)malloc(sizeof(node)); // 失败返回null
if (new_node == (link_n)NULL)
{
perror("malloc....");
return (link_n)-1; // 结点创建失败 返回 -1
}
memset(new_node, 0, sizeof(node));
new_node->next = NULL; //都指向NULL
new_node->prev = NULL;
return new_node;
}
①头插法 √
int Head_Add_Link_List_Node(link_n head_node)
{
// null 是判断传参是否正常 与create_link_list_node函数无关
if (head_node == (link_n)