在isert_at_end函数中传输第一个元素后,头指针如何仍然指向第一个元素? #包括 #包括 #包括 #包括 #定义最大尺寸10 整数计数=0; 类型定义结构列表\u节点 { 国际项目; 结构列表\节点*下一步; }节点; 在起始处插入无效(节点**头地址,int值) { 如果(count==MAXSIZE){ printf(“列表不能容纳超过10个元素\n”); 出口(0); } 节点*新节点; new_node=(node*)malloc(sizeof(node)); 新建_节点->项目=值; 新建节点->下一步=*头部地址; *head\u addr=新节点; 计数++; } 在\u端插入\u无效(节点**头\u地址,int值) { 如果(count==MAXSIZE){ printf(“列表不能容纳超过10个元素\n”); 出口(0); } while(*head_addr!=NULL){ 头地址=&(*头地址)->下一步); } 在开始处插入(头地址,值); } int main() { node*head=NULL; 在_开头插入_(&head,1); 在_开头插入_(&head,0); 将_插入_端部(&头,2); 返回0; }
我的问题是在遍历insert_at_end函数之后,当我在开始时使用insert_时,它仍然在开始时添加它如何完成? 我的代码运行良好,但我只是想知道这件事。在isert_at_end函数中传输第一个元素后,头指针如何仍然指向第一个元素? #包括 #包括 #包括 #包括 #定义最大尺寸10 整数计数=0; 类型定义结构列表\u节点 { 国际项目; 结构列表\节点*下一步; }节点; 在起始处插入无效(节点**头地址,int值) { 如果(count==MAXSIZE){ printf(“列表不能容纳超过10个元素\n”); 出口(0); } 节点*新节点; new_node=(node*)malloc(sizeof(node)); 新建_节点->项目=值; 新建节点->下一步=*头部地址; *head\u addr=新节点; 计数++; } 在\u端插入\u无效(节点**头\u地址,int值) { 如果(count==MAXSIZE){ printf(“列表不能容纳超过10个元素\n”); 出口(0); } while(*head_addr!=NULL){ 头地址=&(*头地址)->下一步); } 在开始处插入(头地址,值); } int main() { node*head=NULL; 在_开头插入_(&head,1); 在_开头插入_(&head,0); 将_插入_端部(&头,2); 返回0; },c,C,我的问题是在遍历insert_at_end函数之后,当我在开始时使用insert_时,它仍然在开始时添加它如何完成? 我的代码运行良好,但我只是想知道这件事。 我不需要创建任何临时指针来遍历答案:因为指针head\u addr只被本地更改为insert\u at\u end(),所以在insert\u at\u end()中对指针本身所做的任何更改在函数返回时丢失,更新到新地址的唯一指针是调用开头插入时最后一个节点的->下一个指针(head\u addr,value),例如 void inser
我不需要创建任何临时指针来遍历答案:因为指针
head\u addr
只被本地更改为insert\u at\u end()
,所以在insert\u at\u end()中对指针本身所做的任何更改
在函数返回时丢失,更新到新地址的唯一指针是调用开头插入时最后一个节点的->下一个指针(head\u addr,value)代码>,例如
void insert_at_end (node **head_addr, int value)
{
if (count == MAXSIZE) {
printf ("List can not accommodate more than 10 elements\n");
exit (0);
}
while (*head_addr != NULL) {
head_addr = &((*head_addr)->next);
}
insert_at_beginning (head_addr, value);
}
上面的head\u addr
是函数的本地指针。在insert\u at_end()
中,未向*head\u addr
分配新值,仅取消引用以检查节点是否为NULL
。head\u addr
的本地副本更改为head\u addr=&((*head\u addr)->next)代码>,但这不会更改它作为其值保存的地址中包含的内容
调用时,在开头插入(head\u addr,value)
,head\u addr
包含列表中最后一个节点的->next
指针的地址,即插入新节点的位置。因此,在中,在\u开头插入\u()
其中*head\u addr=new\u节点
最终被解除引用并分配,您正在将最后一个节点的->next
指针持有的地址从NULL
更新到刚才分配给*head\u addr=new\u node的新节点代码>
(这是指针的一个非常恰当的用法)
您正在迭代节点的地址,而不是更改每个地址上的内容。请参见请应用缩进。如果您想让头部指针继续在头部进行定点操作,请解释为什么要将头部指针移动到末端。也就是说,请解释为什么不创建它的临时副本,并用它在结尾插入。@sourabhchour您的编辑可能很快会被其他人接受。但是请考虑你是否真的帮助OP,如果你这样做的话(也没有FAS,我可以告诉他们,例如,大写,标点符号,可读性……)不要把调用的结果投射到<代码> MalCube()。
。非常感谢。我完全理解您的解释比我们的先生好得多。无论是谁否决了这个问题,请诚实地留下评论。这个答案在技术上是100%正确的,并且回答了一个问题——你在什么基础上投反对票?@divan_1920,谢谢你,我很高兴这有帮助。请看: