用C/C++手搓链表:从青铜到王者的进阶之路

链表就像程序员的"俄罗斯套娃"——每个娃娃肚子里都藏着下一个娃娃的线索。今天我们将用纯手搓代码灵魂比喻,带你彻底征服这个数据结构!


一、链表的本质:程序员的"贪吃蛇"

1.1 核心结构解剖

  • 节点(Node) = 贪吃蛇的关节
    • 数据域:当前关节吃的食物
    • 指针域:下一截蛇身的位置坐标
  • 头指针(Head) = 蛇头GPS定位器
  • 尾节点(Tail) = 蛇尾(指向NULL表示结束)

1.2 类型选择指南

类型 内存消耗 适用场景 经典案例
单向链表 1指针 日志记录 Linux进程列表
双向链表 2指针 浏览器历史记录 Chrome页面栈
循环链表 1指针 轮询任务调度 定时器管理

二、从零手搓链表(C/C++双版本)

2.1 C语言版:结构体+函数式

#include 
#include 

// 节点结构体(内存解剖模型)
struct Node {
    int data;           // 数据域
    struct Node* next;  // 指针域
};

// 创建新节点(造蛇关节)
struct Node* createNode(int val) {
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    newNode->data = val;
    newNode->next = NULL;
    return newNode;
}

// 头插法(贪吃蛇头部生长)
void insertAtHead(struct Node** head, int val) {
    struct Node* newNode = createNode(val);
    newNode->next = *head;
    *head = newNode;
}

// 可视化诊断(给蛇拍X光片)
void printList(struct Node* head) {
    struct Node* curr = head;
    while (curr != NULL) {
        printf("%d -> ", curr->data);
        curr = curr->next;
    }
    printf("NULL\n");
}

2.2 C++版:面向对象封装

class LinkedList {
private:
    // 节点类(胶囊封装)
    class Node {
    public:
        int data;
        Node* 

你可能感兴趣的:(c语言,c++,链表,开发语言,区块链,算法,数据结构)