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 本身
}
相关推荐
List<String> error_P2 小时前
蓝桥杯冲刺(一)
链表·职场和发展·蓝桥杯
abant22 小时前
leetcode 23合并k个有序链表
算法·leetcode·链表
啊董dong2 小时前
noi-2026年3月24号作业
数据结构·c++·算法
猹叉叉(学习版)2 小时前
【系统分析师_知识点整理】 6.企业信息化
笔记·软考·企业信息化·系统分析师
WolfGang0073212 小时前
代码随想录算法训练营 Day19 | 回溯算法 part01
数据结构·算法
北岛寒沫2 小时前
北京大学国家发展研究院 中国经济专题 课程笔记(第三课 人口与劳动力)
经验分享·笔记·学习
cheems95272 小时前
[数据结构]栈和队列的互相模拟实现
数据结构·算法
计算机安禾2 小时前
【数据结构与算法】第6篇:线性表(二):单链表的实现(头插法、尾插法)
c语言·数据结构·学习·算法·链表·visual studio code·visual studio
Xueqian E3 小时前
修复shell脚本失败的修改
笔记