为什么链表传参是二级指针
时间: 2023-05-27 11:04:13 浏览: 147
链表传参是二级指针,是因为链表中的每个节点都是一个包含数据和指向下一个节点的指针的结构体,而每个节点的地址都是动态分配的,传入函数的是该链表的头节点指针。如果传入的是一级指针,函数内部只能访问到该节点的数据部分,而无法修改该节点的指针部分,也无法修改链表的结构。因此,需要传递二级指针,函数内部通过修改该指针所指向的内存中的值,即头节点的指针,来改变链表的结构。
相关问题
用c语言实现二级指针对链表传参
以下是用C语言实现二级指针对链表传参的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node *next;
} Node;
void insert(Node **head, int data) {
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = *head;
*head = newNode;
}
void printList(Node *head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
Node *head = NULL;
insert(&head, 1);
insert(&head, 2);
insert(&head, 3);
printf("The linked list is: ");
printList(head);
return 0;
}
```
在上面的代码中,我们定义了一个链表结构体`Node`,包含数据成员`data`和指向下一个节点的指针`next`。在`insert`函数中,我们使用二级指针`**head`来传递链表的头指针,这样我们就可以直接修改头指针的值。在`printList`函数中,我们只需要使用普通指针`*head`即可遍历整个链表。在`main`函数中,我们使用`insert`函数向链表中插入三个节点,并使用`printList`函数打印出整个链表的数据。
阅读全文