有如下程序  #include<stdio.h>  struct node  {   char id;   struct node * next;  }a={’A’},b={’B’},c={’C’},*p=&a,*pt;  main()  {  

admin2022-10-24  23

问题 有如下程序
 #include<stdio.h>
 struct node
 {
    char id;
    struct node * next;
 }a={’A’},b={’B’},c={’C’},*p=&a,*pt;
 main()
 {
    p->next=&b;
    p=p->next;
    p->next=&c;
    p=p->next;
    p->next=NULL;
    p=&a;
 }
 若程序经运行后形成下图所示的数据结构
 
 则以下可以删除中间结点b的正确选项是(          )。

选项 A、pt=p->next;
 p->next=p->next->next;
 free(pt);
B、pt=p->next;
 p->next=p->next->next->next;
 free(pt);
C、pt=&b;
 free(pt);
D、pt=&b;
 p->next=p->next->next->next;
 free(pt);

答案A

解析 题干中,a、b、c这3个节点都是node类型,它们都有两个成员:字符成员id,node类型指针成员next。由于a的next指向b,b的next指向c,因此a、b、c构成了链表。要想删除b节点,只需要将a节点的next(p->next)指向c(p->next->next),然后将节点b的存储空间释放即可。所以删除b节点的语句为“pt=p->next;p->next=p->next->next;free(pt);”。故本题答案为A选项。
转载请注明原文地址:https://jikaoti.com/ti/Yid0FFFM
0

最新回复(0)