1.链表
定义: 链表是一种物理存储上非连续,数据元素的逻辑顺序通过链表中的指针链接次序,实现的一种线性存储结构。
链表节点分为两个域
数据域:存放各种实际的数据,如:num、score等
指针域:存放下一节点的首地址,如:next等.
            
            
              c
              
              
            
          
          struct Node{
	int data;			//数据域
	struct Node* next   //指针域
}2.链表创建
- 
创建链表(创建一个表头表示整个链表) c//表头 struct Node *createList() { struct Node *head = (struct Node*)malloc(sizeof (struct Node)); //head成为了结构体变量 head->next = NULL; return head; }
- 
创建结点 c//创建结点 struct Node* createNode(int data) { struct Node *node = (struct Node*)malloc(sizeof (struct Node)); node->data = data; node->next = NULL; return node; }
- 
插入结点 c//头部插入结点 void insertNodeHead(struct Node *head, int data) { //创建插入的结点 struct Node *new = createNode(data); new->next = head->next; head->next = new; }
- 
删除结点 c//指定位置删除 void deleteNode(struct Node *head, int index) { struct Node *pos = head->next; struct Node *posFront = head; if (pos == NULL) return; //链表为空 while(pos ->data != index) { posFront = pos; pos = pos->next; if (pos == NULL) //表尾 return; } posFront->next = pos->next; free(pos); }注意:链表的每一个结点都是动态开辟(malloc)出来的,删除结点后需要释放掉。 
- 
打印遍历链表 cvoid printList(struct Node *node) { struct Node *p = node->next; while(p->next != NULL) { printf("%d ", p->data); p = p->next; } printf("\n"); }
3.测试代码
            
            
              c
              
              
            
          
          #include "stdio.h"
struct  Node
{
    int data;
    struct Node *next;
};
struct Node *createList()
{
    struct Node *head = (struct Node*)malloc(sizeof (struct Node));
    //head成为了结构体变量
    head->next = NULL;
    return head;
}
struct Node* createNode(int data)
{
    struct Node *node = (struct Node*)malloc(sizeof (struct Node));
    node->data = data;
    node->next = NULL;
    return node;
}
void printList(struct Node *node)
{
    struct Node *p = node->next;
    while(p)
    {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
}
//头部插入节点
void insertNodeHead(struct Node *head, int data)
{
    //创建插入的节点
    struct Node *new = createNode(data);
    new->next = head->next;
    head->next = new;
}
//指定位置删除
void deleteNode(struct Node *head, int index)
{
    struct Node *pos = head->next;
    struct Node *posFront = head;
    if (pos == NULL)
        return;     //链表为空
    while(pos ->data != index)
    {
        posFront = pos;
        pos = pos->next;
        if (pos == NULL)  //表尾
            return;
    }
    posFront->next = pos->next;
    free(pos);
}
int main()
{
    struct node *list = createList();
    insertNodeHead(list,1);
    insertNodeHead(list,2);
    insertNodeHead(list,3);
    insertNodeHead(list,4);
    printList(list);
    deleteNode(list,2);
    printList(list);
    //printf("Hello World!\n");
    return 0;
}参考来源:
【1个小时学会单链表,C语言数据结构专题】https://www.bilibili.com/video/BV1Rb411F738?vd_source=3075951c704cf80b7df7522fbb58214d
建议画图理解!!!