首页 > 试题广场 >

单链表的按升序排列,其中L指向头结点,写一个函数,若star

[单选题]
单链表的按升序排列,其中L指向头结点,写一个函数,若start<元素<end,则删除,并释放空间。
如13->19->26->30->49->63,start=21,end=51,删除后为13->19->63.结点定义及函数模板如下,请为(1)(2)(3)(4)处出选择合适的代码。
typedef struct Node{
    int data;
    struct Node *next;
}Node,*LinkList;
int delList(LinkList L,int start,int end)
{
    (1) * q = L,*p = L->next;
     int delFlag = 0;
     while ( p )
         if ( p->data <= start)
             { q = p; p = (2);}
         else
             if ( p->data < end )
             {
                 q->next = (3); free(p);
                 p = (4); delFlag = 1;
              }
             else  break;
      if( delFlag == 0) return -1;
      return 0;
}

  • (1)LinkList
    (2)p->next
    (3)p
    (4)q->next
  • (1)LinkList
    (2)p->next
    (3)p->next
    (4)q->next
  • (1)Node
    (2)p->next
    (3)p->next
    (4)q
  • (1)Node
    (2)p->next
    (3)p->next
    (4)q->next

首先在C中,定义结构体变量时,必须要加上struct 关键字,为了方便一般用typedef 简化,题中struct Node 被简化为 Node,struct Node * 被简化为 LinkList

题目中第7行有错误,中间的分号是错的,应该是逗号

  • (1)从后面q->next,p->data的使用看来,这里定义的是一级指针,应该用Node,且q指向链表头结点,p指向data为13的节点
  • (2)判断条件为p->data<=start,是不需要删除的节点,q=p,使q指向当前节点,操作完成,看到整个while循环中,没有单独使指针p移动的语句,所以应在每个判断分支单独移动指针p,所以,p=p->next
  • (3)判断条件为p->data<end,是需要删除的节点,此时,指针q指向的还是前一个(并不一定是前面的节点)不需要删除的节点,让q->next=p->next以跳过当前节点,再free当前节点的资源
  • (4)操作完成后需要移动指针p,应该是p=q->next而不是p=p->next,因为此时p是一个悬空指针,p->next是未定义的,而q->next指向的是释放资源前p指针下一个位置的指针
发表于 2020-03-12 13:10:05 回复(0)

Node结点定义了一个整型的数据data和一个结点*next,那么next是指向这个结点的指针,L是一个LinkList,因此q应该是一个结点类型的指针,*p指向的是L中的下一个结点,当指针p指向的数据<=start时,把指针p的值赋给指针q,然后p指向L中的下个结点,以便下次循环对链表中的下一个结点进行判断;当指针p指向的数据<end,需要删除这个结点,将p指向的下个结点赋给q的指向,然后删除p中的数据,再将p指向刚才赋给q指向的结点。不知道对不对,希望大家批评指正……

发表于 2019-10-07 21:53:25 回复(0)
填空1 Linklist 是结构体指针 Node * 是结构体指针 Lisklist * 是结构体指针的指针
发表于 2022-08-23 14:05:30 回复(0)
谁能解释一下第(1)处为什么用Node而不用LinkList?
发表于 2020-07-30 15:39:09 回复(3)
有人解答一下为什么第一个空是node吗。不是很看得懂
发表于 2022-03-24 22:47:27 回复(0)
我选了个c 最后一空错了 看评论终于懂了
发表于 2022-11-15 22:40:43 回复(0)
太难了😫
发表于 2022-06-27 18:38:36 回复(0)
最后,q->next =null了,p->next =q->next->next 属于为定义了。
发表于 2022-04-02 14:49:54 回复(0)