为什么链表传参是二级指针
时间: 2023-05-27 20:04:13 浏览: 104
链表传参是二级指针,是因为链表中的每个节点都是一个包含数据和指向下一个节点的指针的结构体,而每个节点的地址都是动态分配的,传入函数的是该链表的头节点指针。如果传入的是一级指针,函数内部只能访问到该节点的数据部分,而无法修改该节点的指针部分,也无法修改链表的结构。因此,需要传递二级指针,函数内部通过修改该指针所指向的内存中的值,即头节点的指针,来改变链表的结构。
相关问题
用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`函数打印出整个链表的数据。
链表为什么不传二级指针
链表中每个节点都包含一个指向下一个节点的指针,如果我们要在链表中插入、删除或者修改某个节点,只需要修改该节点的指针即可,不需要修改指向该节点的指针的值。
因此,在链表操作中,我们通常只需要传入指向该节点的指针即可完成操作,不需要传入二级指针。
需要注意的是,在链表头节点的插入和删除操作中,我们需要修改指向链表头节点的指针的值,这时可以传入指向该指针的指针,也就是二级指针,但是在实际实现中,我们也可以返回新的链表头节点的指针,避免使用二级指针。