单链表:
数据结构:
typedef struct list_node {
int data; //数据域
struct NODE *next; //指针域
}NODE;
创建一个链表:
NODE *Create_Node()
{
NODE *head = NULL; //定义一个头指针
head = (NODE *)malloc(sizeof(NODE)); //分配空间
if (head == NULL)
{
printf("malloc failed\n");
}
head->next = NULL;
return head;
}
创建一个节点:
NODE *CreateNode(int data)
{
NODE *node =NULL;
node =(NODE *)malloc(sizeof(NODE));
if(node == NULL)
{
printf("malloc failed");
}
node->data = data;
node->next = next
}
头插法:
void head_insert(NODE *head, NODE *new)
{
NODE *headnode = head;
new->next = headnode->next;
headnode->next = new;
}
尾插法:
void tail_insert(NODE *headnode, NODE *new)
{
NODE *node = headnode;
while (NULL != node->next)
{
node = node->next;
}
//跳出循环,已经到了NULL,将new节点赋值给NULL这个位置
node->next = new;
}
链表的遍历:
void printnode(NODE *headnode)
{
//获取当前位置
NODE *head = headnode;
head = head->next;
while(head)
{
printf("data:%d\n",head->data);
head = head->next;
}
printf("data:%d\n",head->data);
}
链表的删除:
void delete_node(NODE *headnode, int delete_data)
{
NODE *head = headnode; //当前节点
NODE *prev = NULL; //当前节点的上一个节点
while(head->next)
{
prev = head;
head = head->next;
if(head->data = delete_data)
{
//1.普通节点
if(head->next)
{
prev->next = head->next;
free(head);
}
else {
prev->next =NULL;
free(head);
}
}
return 0;
}
printf("m没有要删除的节点");
return -1;
}