DS-2 有/无头结点的单向链表

一、头结点

一个不存有效数据的"哨兵结点",头结点的 next 才指向第一个数据结点。

二、区别

1. 空链表表现不同

  • 不带头结点 :head = NULL(直接是空指针)

  • 带头结点 :head ≠ NULL,但 head->next = NULL(永远有头结点)

2. 插入/删除操作

  • 不带头结点

    • 在链表头部插入/删除 时,必须修改头指针 head

    • 头部操作和中间/尾部操作代码逻辑不一样,要单独判断

    • 容易出现空指针、逻辑错误

cpp 复制代码
// 在头部插入新结点
void add(Node** head, int val) {
    Node* new = create(val);
    if (*head == NULL) {  // 必须单独判断空表
        *head = new;      // 直接修改头指针
    } else {
        new->next = *head;
        *head = new;
    }
}
  • 带头结点

    • 无论在头部、中间、尾部插入/删除,逻辑完全统一
cpp 复制代码
// 无论空表还是非空,代码都一样
void add(Node* head, int val) {
    Node* new = create(val);
    new->next = head->next;
    head->next = new;  // 永远不用修改 head 本身
}
相关推荐
一隅论数智3 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
m0_547486663 天前
《数据结构教程》全套 PPT课件2026
数据结构
深圳老胡3 天前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
Because_of_Her13 天前
并查集-听课笔记
笔记·算法·并查集
彧azz3 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
陈卫军老师3 天前
陈卫军:把口味写在一张纸上,店才稳得住
经验分享·笔记·流量运营
`流年づ3 天前
人工智能学习笔记 - 补充
人工智能·笔记·深度学习·学习
qeen873 天前
【Linux】操作系统之进程介绍(二)
linux·笔记·学习·进程
从零开始的嵌入式之旅3 天前
day47
arm开发·经验分享·笔记·嵌入式硬件
陈年老古董3 天前
MediaPipe 姿态检测与脸部关键点检测
笔记·python·opencv·学习·dlib