使用函数调用链接列表插入问题

时间:2016-04-09 16:52:49

标签: c

当我们在函数调用的帮助下在链接列表中插入一个元素时,为什么有必要传递head的引用而不是直接传递head例如......我们使用void push(struct node ** head_ref, int new_data)而不是void push(struct node * head,int new_data)..其中push是插入元素的函数..?

1 个答案:

答案 0 :(得分:0)

你没有提供关于push函数的足够信息来确定函数参数的确切原因(即它是在结尾插入元素还是在开头?)

将指针传递给指针的一个主要原因是头指针发生了变化,并且您希望在函数调用后保留更改。

我可以想到两种可能性,即插入函数为什么具有该参数结构。

如果您的推送功能插入列表的末尾,给插入函数一个空列表(在这种情况下为空指针),指向头部的指针将从空指针更改为插入的单个元素的地址现在是头。

如果您的推送功能每次都插入头部,则头节点的地址会不断变化。

例如,在以下链表中,头指针指向包含1:

的节点

1 -> 2 -> 3 -> 4

将数据元素5推到前面后,链表表示如下所示:

5 -> 1 -> 2 -> 3 -> 4

现在5是头指针指向的位置。但是,如果push函数的参数结构为void push(struct node *head_ref, int new_data),则head_ref在退出函数后仍将指向包含1的节点。但是对于void push(struct node **head_ref, int new_data),当前header_ref位置的更改将存储在指向它的指针中。