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

admin2022-04-01  16

问题 有如下代码
 #include <stdio.h>
 struct node
 {
    char id;
    struct node *l=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三个结点都是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://kaotiyun.com/show/32kp777K
0

最新回复(0)