在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; }

在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

我的问题是在遍历insert_at_end函数之后,当我在开始时使用insert_时,它仍然在开始时添加它如何完成? 我的代码运行良好,但我只是想知道这件事。
我不需要创建任何临时指针来遍历

答案:因为指针
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,谢谢你,我很高兴这有帮助。请看: