C语言使用头插法建立无头结点的单链表
时间: 2024-09-08 21:01:11 浏览: 19
在C语言中,使用头插法建立无头结点的单链表是指在链表的开始位置,每次插入的新节点都会被放置在链表的第一个位置,这样新插入的节点就会成为链表的第一个元素,而之前的所有节点则会依次后移。
具体操作步骤如下:
1. 首先定义链表节点的结构体,通常包含数据域和指向下一个节点的指针。
2. 初始化一个指针变量,用于指向链表的第一个节点,初始时这个指针指向NULL,表示链表为空。
3. 每次插入节点时,创建一个新的节点,将新节点的next指针指向当前链表的第一个节点。
4. 然后将之前指向第一个节点的指针更新为指向这个新创建的节点,完成插入操作。
下面是一个简单的示例代码,展示了如何使用头插法建立无头结点的单链表:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
exit(-1); // 分配内存失败
}
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 头插法插入节点
void insertHead(Node** head, int data) {
Node* newNode = createNode(data);
newNode->next = *head;
*head = newNode;
}
// 打印链表
void printList(Node* head) {
Node* current = head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
// 释放链表内存
void freeList(Node* head) {
Node* temp;
while (head != NULL) {
temp = head;
head = head->next;
free(temp);
}
}
int main() {
Node* head = NULL; // 初始化链表头指针为NULL
insertHead(&head, 3);
insertHead(&head, 2);
insertHead(&head, 1);
printList(head); // 打印链表,应该输出 1 2 3
freeList(head); // 释放链表内存
return 0;
}
```