跃2.0 2019-03-02 16:31 采纳率: 40%
浏览 1623
已采纳

问一个很愚蠢的基础问题,p=p->next链表循环里,为什么这样不会覆盖掉链表的值啊

链表循环里
比如L是带头节点的单链表
循环单链表一般都是

list p=(list)malloc(sizeof(link));
p=L->next;
while(p)
{
        printf("%d ",p->data);
        p=p->next;  
}

为什么节点值没有一个一个被覆盖掉,下一次遍历还存在啊。
比如L 这个链表里面值分别是 1,2,3,4,5,按照p=p->next不应该是1这里的节点被2代替,2被3代替了么,求解求解,以前写代码就只是写写没有思考过。。。

还有

单链表构建栈反向输出链表节点值
void print(list p)
if(p->next!=0)
print(p->next);
printf("%d",p->data);}
它为什么可以输出最后一个节点以外值不应该输出了最后一个节点值就跳出程序么 
  • 写回答

4条回答

  • IgJngdr 2019-03-02 21:31
    关注

    因为P是指针,p=p->next操作时移动的是指针指向的地址。你可以从节点结构体来看

    struct NODE
    {
        int value;
        struct NODE *next;
    };
    

    上面这个结构体value存的是节点的值,next存的是下个节点的地址。所以在执行p=p->next时,就是改变p指针指向的位置图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?