双重指针作为函数参数返回链表头
时间: 2024-09-06 19:03:39 浏览: 18
在C语言中,双重指针(也称为二级指针)是指向指针的指针。当函数需要修改指针本身的值时,通常会使用双重指针作为参数。在涉及到动态数据结构,如链表时,双重指针尤其有用,因为可以通过它来修改头指针,从而实现添加或删除链表头部元素的操作。
下面是一个简单的例子来说明如何使用双重指针作为函数参数来返回链表头:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
struct Node {
int data;
struct Node* next;
};
// 函数原型声明
void createNode(struct Node** head, int data);
int main() {
struct Node* head = NULL; // 初始化链表头指针为NULL
createNode(&head, 1); // 创建一个数据为1的节点并添加到链表头
createNode(&head, 2); // 创建一个数据为2的节点并添加到链表头
// 打印链表
struct Node* temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
// 清理链表内存
while (head != NULL) {
struct Node* temp = head;
head = head->next;
free(temp);
}
return 0;
}
// 使用双重指针修改头指针,以实现在链表头部添加节点
void createNode(struct Node** head, int data) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); // 动态分配内存
newNode->data = data;
newNode->next = *head; // 新节点指向当前的头节点
*head = newNode; // 更新头指针为新节点
}
```
在这个例子中,`createNode` 函数使用了双重指针 `struct Node** head` 作为参数,这样函数内部对 `head` 所指向的指针的修改会影响到 `main` 函数中的 `head` 指针。因此,当我们调用 `createNode(&head, 1);` 时,新创建的节点被添加到了链表的头部,并且链表的头指针被更新了。