drawingourmoments 2022-09-14 09:59 采纳率: 100%
浏览 16
已结题

关于链表的一个小问题

#include<stdio.h>
#include<iostream>
#include<malloc.h>

typedef struct node
{
    unsigned char elem;
    node* next;
};

void print_linklist(void);
void create_list(unsigned char elem);

node* head = NULL;
node* tail = NULL;

void create_list(unsigned char elem)
{
    node* p = (node*)malloc(sizeof(node));
    p->elem = elem;
    p->next = NULL;

    if (head == NULL)
    {
        head = p;
    }
    else
    {
        tail->next = p;

    }

    tail = p;
}

void print_linklist(void)
{
    struct node* p;

    for (p = head; p; p = p->next)
        printf("%c", p->elem);

    printf("\n");
}

请问一下大家,这段代码中的head不是一直等于第一次创建的p吗?那它的next不是一直为NULL吗,那为什么后续可以通过head里的next来不断访问后续的内容呢?看了半天实在 不明白,希望xdm看看,谢谢!

  • 写回答

2条回答 默认 最新

  • 於黾 2022-09-14 10:04
    关注

    1.head如果是空,就把它设置成p,如果不是空,就不设置成p,所以head会保持一直是首节点的地址,而不会随着节点的增多不断的指向新的地址
    2.一开始的时候,head和tail都指向了p,当又新增节点的时候,tail->next = p;此时head与tail地址相同,head的next不也指向p了吗
    3.最后tail=p,head与tail不再指向同一个地址了,此时head->next指向p,tail指向p,tail->next指向空
    4.你能问出这样的问题来,说明你没有真正理解指针到底是个什么玩意,还以为指针跟整型变量一样里面存了个值吗

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

报告相同问题?

问题事件

  • 系统已结题 9月22日
  • 已采纳回答 9月14日
  • 创建了问题 9月14日

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看