指针的指针返回链表头
时间: 2024-09-06 21:03:39 浏览: 47
指针的指针返回链表头是指在C语言中,使用双重指针(即指针的指针)来返回一个链表的头节点的地址。这种做法在某些情况下非常有用,比如当你需要修改函数外部的指针变量时。下面是一个简单的例子来说明这个概念:
```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) {
printf("内存分配失败。\n");
exit(1);
}
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 创建链表并返回头节点指针的函数
Node** createLinkedList(int n, int data[]) {
Node** head = (Node**)malloc(sizeof(Node*)); // 分配头指针的存储空间
*head = NULL; // 初始化链表为空
for (int i = 0; i < n; ++i) {
Node* newNode = createNode(data[i]); // 创建新节点
newNode->next = *head; // 将新节点链接到当前链表头部
*head = newNode; // 更新头节点指针
}
return head; // 返回头节点指针的地址
}
int main() {
int data[] = {1, 2, 3};
Node** head = createLinkedList(3, data); // 获取链表头指针
// 打印链表
Node* current = *head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
// 释放链表内存
while (*head != NULL) {
Node* temp = *head;
*head = (*head)->next;
free(temp);
}
free(head); // 释放头指针的存储空间
return 0;
}
```
在这个例子中,`createLinkedList` 函数通过双重指针返回了一个新创建的链表的头节点。在 `main` 函数中,我们通过 `head` 指针来访问和操作链表。
阅读全文