刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

阅读以下说明和C函数,填补代码中的空缺,将解答填入答题纸的对应栏内。
[说明]
函数ReverseList(LinkList headptr)的功能是将含有头结点的单链表就地逆置。处理思路是将链表中的指针逆转,即将原链表看成由两部分组成:已经完成逆置的部分和未完成逆置的部分,令s指向未逆置部分的第一个结点,并将该结点插入已完成部分的表头(头结点之后),直到全部结点的指针域都修改完成为止。
例如,某单链表如图1所示,逆置过程中指针s的变化情况如图2所示。

链表结点类型定义如下:

typedef struct Node{

    int data;

    Struct Node *next;

    }Node,*LinkList;

    [C函数]

    void ReverseList
(LinkList headptr)

    {  //含头结点的单链表就地逆置,headptr为头指针

    LinkList p,s;

    if(______)
 return;    //空链表(仅有头结点)时无需处理

    P=______;  
 //令P指向第一个元素结点

    if(!P->next)  return;    //链表中仅有一个元素结点时无需处理

    s=p->next;    //s指向第二个元素结点

    ______ =NULL;
   //设置第一个元素结点的指针域为空

    while(s){

    p=s;  
 //令p指向未处理链表的第一个结点

    s= ______;

    p->next=headptr->next;    //将p所指结点插入已完成部分的表头

    headptr->next= ______;

    }

    }

使用微信搜索喵呜刷题,轻松应对考试!

答案:

!headptr->next,或!headptr||!headptr->next,或其等价形式
headptr->next
headptr->next->next,或p->next,或其等价形式
s->next,或p->next,  或其等价形式
p

解析:

本题考察的是对链表操作的掌握和理解。根据题目描述和提供的参考解析,我们可以逐一填补代码中的空缺。

  1. 空链表的判断:当链表为空时,头结点的指针域应该为空。因此第一个空处应填写条件判断语句来检查头结点的指针域是否为空,即"!headptr->next",或者等价的形式如"headptr==NULL"。
  2. 令P指向第一个元素结点:根据注释,我们需要让P指向链表的第一个元素结点,所以第二个空处应填写"headptr->next"。
  3. 设置第一个元素结点的指针域为空:在将未逆置部分的第一个结点插入已完成部分的表头之前,我们需要先将第一个元素结点的指针域设置为空,避免链表断裂。因此第三个空处应填写"headptr->next->next",或者等价的形式如"p->next"。
  4. s指向未逆置部分的下一个结点:在while循环中,我们需要让s指向未逆置部分的下一个结点,以便进行后续处理。所以第四个空处应填写"s->next",或者等价的形式如"p->next"。
  5. 将P所指结点插入已完成部分的表头:这是逆置链表的关键步骤之一。我们需要将P所指结点插入已完成部分的表头(即头结点之后)。因此最后一个空处应填写"p"。
创作类型:
原创

本文链接:阅读以下说明和C函数,填补代码中的空缺,将解答填入答题纸的对应栏内。[说明]函数ReverseLis

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share