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
。 -
用于简化链表操作,避免空链表的特殊处理。
-