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

问一个很愚蠢的基础问题,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条)

报告相同问题?