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 本身
}
相关推荐
一支蜉蝣5 小时前
Day25 XD安全笔记 安全开发-PHP 应用&文件管理模块&包含&上传&遍历&写入&删除&下载&安全
笔记·网络安全·php
Awh-5 小时前
ARM 裸机开发 DAY10 学习笔记
arm开发·笔记·学习
He BianGu6 小时前
【笔记】WPF中CachingHint的功能
笔记·wpf
动词ing6 小时前
[题目练习】三数之和
数据结构
问心无愧05136 小时前
[ACTF2020 新生赛]Exec
运维·服务器·笔记
YSL0701246 小时前
一文通关-----栈和队列
开发语言·数据结构
垆边人似月.7 小时前
找出最小的 K 个数
数据结构·c++·算法
云半S一7 小时前
Agent 学习总结一
经验分享·笔记·学习·agent
跨知易知识产权7 小时前
美国发明专利和外观专利的保护期限分别是多久,外观专利是否需要缴纳维持费?
笔记
八月的雨季 最後的冰吻7 小时前
C++ 面试要点笔记(续)
c++·笔记·面试