2025-03-14 学习记录--C/C++-DS-头结点和头指针的区别

DS-头结点和头指针的区别 ⭐️

1. 头指针(Head Pointer)🍭

  • 定义:📚

    • 头指针是指向链表第一个节点的指针。

    • 它是一个指针变量,存储的是链表中第一个节点的地址。

  • 特点:🍰

    • 头指针始终指向链表的第一个节点。

    • 如果链表为空(即没有节点),头指针的值为 NULL

  • 作用:🦋

    • 通过头指针可以访问整个链表。

    • 头指针是链表的入口,没有头指针就无法访问链表。

  • 示例:🌰

c 复制代码
List head; // head 是头指针
  • 如果 链表为空head = NULL
  • 如果 链表不为空head 指向第一个节点

2. 头结点(Head Node)🍭

  • 定义:📚

    • 头结点是链表中的一个特殊节点,位于链表的第一个元素之前。

    • 它是一个实际的节点,通常不存储有效数据(或存储一些辅助信息,如链表长度)。

  • 特点:🍰

    • 头结点的 Next 指针指向链表的第一个有效节点。

    • 即使链表为空,头结点仍然存在。

  • 作用:🦋

    • 头结点可以简化链表的操作,例如在插入和删除节点时不需要特殊处理空链表的情况。

    • 头结点的数据域通常不使用,或者用于存储链表的元信息(如长度)。

  • 示例:🌰

c 复制代码
struct Node {
    int Data;
    struct Node* Next;
};

struct Node headNode; // headNode 是头结点
headNode.Next = NULL; // 初始时链表为空
  • 如果 链表为空headNode.Next = NULL
  • 如果 链表不为空headNode.Next 指向第一个有效节点

3、头指针 vs 头结点 🍭

特性 头指针(Head Pointer) 头结点(Head Node)
类型 指针变量 实际节点
存储内容 链表中第一个节点的地址 数据域(通常为空)和指向第一个节点的指针
链表为空时 值为 NULL 存在,Next 指针为 NULL
作用 链表的入口,用于访问链表 简化链表操作,避免空链表的特殊处理
示例 List head; struct Node headNode;

4、示例代码 🍭

(1)、使用头指针的链表 🎈
c 复制代码
#include <stdio.h>
#include <stdlib.h>

struct Node {
    int Data;
    struct Node* Next;
};

typedef struct Node* List;

int main() {
    List head = NULL; // 头指针,初始为空

    // 插入一个节点
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    newNode->Data = 1;
    newNode->Next = NULL;

    head = newNode; // 头指针指向新节点

    printf("头指针链表:%d\n", head->Data); // 输出:1

    return 0;
}
(2)、使用头结点的链表 🎈
c 复制代码
#include <stdio.h>
#include <stdlib.h>

struct Node {
    int Data;
    struct Node* Next;
};

int main() {
    struct Node headNode; // 头结点
    headNode.Next = NULL; // 初始时链表为空

    // 插入一个节点
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    newNode->Data = 1;
    newNode->Next = NULL;

    headNode.Next = newNode; // 头结点的 Next 指向新节点

    printf("头结点链表:%d\n", headNode.Next->Data); // 输出:1

    return 0;
}

5、总结 🍭

  • 头指针:🌈

    • 是指向链表第一个节点的指针。

    • 链表为空时,头指针为 NULL

    • 是链表的入口,用于访问链表。

  • 头结点:🌈

    • 是链表中的一个特殊节点,位于第一个有效节点之前。

    • 链表为空时,头结点仍然存在,其 Next 指针为 NULL

    • 用于简化链表操作,避免空链表的特殊处理。

相关推荐
似水明俊德18 分钟前
02-C#.Net-反射-学习笔记
开发语言·笔记·学习·c#·.net
adore.9681 小时前
3.18 复试学习
学习
C羊驼1 小时前
C语言:两天打鱼,三天晒网
c语言·经验分享·笔记·算法·青少年编程
留白_1 小时前
MySQL学习(9)——索引
学习
请你喝好果汁6412 小时前
生信学习笔记:ArchR 处理小麦单细胞 ATAC-seq 中的细胞数差异与 Embedding 报错调试
学习
jinanwuhuaguo2 小时前
OpenClaw、飞书、Claude Code、Codex:四维AI生态体系的深度解构与颗粒化对比分析
大数据·人工智能·学习·飞书·openclaw
本喵是FW3 小时前
C语言手记1
java·c语言·算法
萨文 摩尔杰3 小时前
GPS原理学习
学习·fpga开发
fengci.3 小时前
ctfshow(web入门)295-300
java·开发语言·学习
炘爚5 小时前
C语言(const的指针定义的区别)
c语言