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 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化