链表题:一个链表的结点结构struct Node{int data ;Node *next ;};typedef struct Node Node ;(1)已知链表的头结点head,写一个函数把这个链表逆序( Intel)

题目

链表题:一个链表的结点结构

struct Node

{

int data ;

Node *next ;

};

typedef struct Node Node ;

(1)已知链表的头结点head,写一个函数把这个链表

逆序( Intel)


相似考题
参考答案和解析
正确答案:

Node * ReverseList(Node *head) //链表逆序
{
if ( head == NULL || head->next == NULL )
return head;
Node *p1 = head ;
Node *p2 = p1->next ;
Node *p3 = p2->next ;
p1->next = NULL ;
while ( p3 != NULL )
{
p2->next = p1 ;
p1 = p2 ;
p2 = p3 ;
p3 = p3->next ;
}
p2->next = p1 ;
head = p2 ;
return head ;
}
更多“链表题:一个链表的结点结构struct Node{int data ;Node *next ;};typedef struct Node Node ;(1)已知链表的头结点head,写一个函数把这个链表逆序( Intel)”相关问题
  • 第1题:

    以下程序中函数fun的功能是:构成一个如图所示的带头结点的单词链表,在结点的数据域中放入了具有两个字符的字符串。函数disp的功能是显示输出该单链表中所有结点中的字符串。请填空完成函数disp。[*]

    include<stdio.h>

    typedef struct node /*链表结点结构*/

    {char sub[3];

    struct node *next;

    }Node;

    Node fun(char s) /*建立链表*/

    { … }

    void disp(Node *h)

    { Node *


    正确答案:

  • 第2题:

    函数min()的功能是:在带头结点的单链表中查找数据域中值最小的结点。请填空includestruc

    函数min()的功能是:在带头结点的单链表中查找数据域中值最小的结点。请填空

    include <stdio.h>

    struct node

    { int data;

    struct node *next;

    };

    int min(struct node *first)/*指针first为链表头指针*/

    { struct node *p; int m;

    p=first->next; re=p->data; p=p->next;

    for( ;p!=NULL;p=【 】)

    if(p->data<m ) re=p->data;

    return m;

    }


    正确答案:p->next
    p->next 解析:本题考查的知识点是:链表的筛选。题目要求筛选出链表中最小的值,所以需要先定义一个临时变量,并将第1个值赋给该变量,就好像本题程序中定义的变量 m。然后遍历整个链表,拿链表中的每一个值跟m比较,如果找到比m小的值,就让m等于该值,这样遍历结束后,m中就是该链表的最小值了。题目中的空位于for循环的第3个表达式处,这里的for循环就是用来遍历整个链表的,所以该表达式需要完成的任务是:将循环变量p指向当前结点的下一个结点。故不难得知应填p->next。

  • 第3题:

    以下程序的功能是:建立一个带有头结点的甲—向链表,并将存储在数组中的字符依次转存到链表的各个结点中,请从与下划线处号码对应的一组选项中选择出正确的选项。

    #include <stdlib.h>

    struct node

    { char data; struct node *next: };

    (1) CreatList(char *s)

    {

    struct node *h,*p,*q;

    h = (struct node *)malloc sizeof(struct node));

    p=q=h;

    while(*s! ='\0')

    {

    p = (struct node *)malloc(sizeof (struct node));

    p->data = (2) ;

    q->next = p;

    q - (3) ;

    S++;

    }

    p->next='\0';

    return h;

    }

    main()

    {

    char str[]="link list";

    struct node *head;

    head = CreatList(str);

    }

    (1)

    A.char*

    B.struct node

    C.struct node*

    D.char


    正确答案:C

  • 第4题:

    以下程序的功能是:建立一个带有头结点的单向链表,并将存储在数组中的字符依次转储到链表的各个结点中,请从与下划线处号码对应的一组选若中选择出正确的选项。#include stuct node{ char data; struct node *next;}; (48) CreatLis(char *s){ struct node *h,*p,*q); h=(struct node *)malloc(sizeof(struct node)); p=q=h; while(*s!='\0') { p=(struct node *)malloc(sizeof(struct node)); p->data= (49) ; q->next=p; q= (50) ; s++; } p->next='\0'; return h;}main(){ char str[]="link list"; struct node *head; head=CreatLis(str); ...}

    A.char *

    B.struct node

    C.struct node*

    D.char


    正确答案:C
    解析:CreateList(  )函数在最后返回h,而h是structn。node*类型的变量。

  • 第5题:

    下列给定程序中,是建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值。函数fun的作用是求出单向链表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。

    请改正程序指定部位的错误,使它能得到正确结果。

    [注意] 不要改动main函数,不得增行或删行,也不得更改程序的结构。

    [试题源程序]

    include<stdio.h>

    include<stdlib.h>

    typedef struct aa

    {

    int data;

    struct aa *next;

    }NODE;

    fun(NODE *h)

    {

    int max=-1;

    NODE *p;

    /***********found************/

    p=h;

    while(p)

    {

    if(p->data>max)

    max=p->data;

    /************found************/

    p=h->next;

    }

    return max;

    }

    outresult(int s, FILE *Pf)

    {

    fprintf(pf, "\nThe max in link: %d\n", s);

    }

    NODE *creatlink(int n, int m)

    {

    NODE *h, *p, *s, *q;

    int i, x;

    h=p=(NODE *)malloc(sizeof(NODE));

    h->data=9999;

    for(i=1; i<=n; i++)

    {

    s=(NODE *)malloc(sizeof(NODE));

    s->data=rand()%m; s->next=p->next;

    p->next=s; p=p->next;

    }

    p->next=NULL;

    return h;

    }

    outlink(NODE *h, FILE *pf)

    {

    NODE *p;

    p=h->next;

    fprintf(Pf, "\nTHE LIST:\n\n HEAD");

    while(P)

    {

    fprintf(pf, "->%d", P->datA); p=p->next;

    }

    fprintf(pf, "\n");

    }

    main()

    {

    NODE *head; int m;

    head=cteatlink(12,100);

    outlink(head, stdout);

    m=fun(head);

    printf("\nTHE RESULT"\n");

    outresult(m, stdout);

    }


    正确答案:(1)错误:p=h; 正确:p:h->next; (2)错误:p=h->next; 正确:p=p->next;
    (1)错误:p=h; 正确:p:h->next; (2)错误:p=h->next; 正确:p=p->next; 解析:程序中使用while循环语句并结合结构指针p来找到数据域中的最大值。
    错误1:P指向形参结构指针h的next指针,所以应改为:p=h->next;
    错误2:p指向自己的下一个结点,所以应改为:p=p->next

  • 第6题:

    [说明]

    已知包含头节点(不存储元素)的单链表的元素已经按照非递减方式排序,函数compress(NODE *head)的功能是去掉其中重复的元素,使得链表中的元素互不相同。

    处理过程中,当元素重复出现时,保留元素第一次出现所在的节点。

    图8-29(a)、(b)是经函数compress( )处理前后的链表结构示例图。

    链表的节点类型定义如下:

    typedef struct Node {

    int data;

    struct Node *next;

    }NODE;

    [C语言函数]

    void compress(NODE *head)

    {

    NODE *ptr, *q;

    ptr= (1) ; /*取得第一个元素节点的指针*/

    while( (2) && ptr->next) {

    q=ptr ->next;

    while(q && (3) ){/*处理重复元素*/

    (4) =q ->next;

    free(q);

    q=ptr->next;

    }

    (5) =ptr->next;

    } /*end of while*/

    } /*end of compress*/


    正确答案:head>next ptr ptr->data==q->data或其等价形式 ptr->next ptr
    head>next ptr ptr->data==q->data或其等价形式 ptr->next ptr 解析:本题考查的是对链表的查找、插入和删除等运算。要找到重复的元素并将其删除而使各元素互不相同。我们可以顺序遍历链表,比较逻辑上相邻的两个元素是否相同,如果相同则删除后一个元素,以此类推。代码如下:
    VOid Compress(NODE *head)
    {
    NODE *ptr, *q;
    ptr=head->next; /*取得第一个元素节点的指针*/
    while(ptr && ptr->next){
    q=ptr->next;
    while(q && ptr->data==q>data){/*处理重复元素*/
    ptr->next=q->next;
    free(q);
    q=ptr->next;
    }
    ptr=ptr->next;
    }/*end of while*/
    }/*end of compress*/

  • 第7题:

    下面正确定义了仅包含一个数据成员info的单链表的结点类型。struct node { int info;struct node next;} ()

    此题为判断题(对,错)。


    正确答案:错误

  • 第8题:

    下面程序的功能是建立一个有 3 个 结 点的单向循环链表,然后求各个 结 点数值域 data 中数据的和。请填空。

    include <stdio.h>

    include <stdlib.h>

    struct NODE{ int data;

    struct NODE *next;

    };

    main()

    { struct NODE *p,*q,*r;

    int sum=0;

    p=(struct NODE*)malloc(sizeof(struct NODE));

    q=(struct NODE*)malloc(sizeof(struct NODE));

    r=(struct NODE*)malloc(sizeof(struct NODE));

    p->data=100; q->data=200; r->data=200;

    p-> next =q; q-> next =r; r-> next =p;

    sum=p->data+p->next->data+r->next->next 【 19 】 ;

    printf("%d\n",sum);

    }


    正确答案:
    (16)答案->next->data解析:r->next->next->next指向的是r结点,r->next->next->next->data是r的数据域data中的数据。

  • 第9题:

    函数main()的功能是:在带头结点的单链表中查找数据域中值最小的结点.请填空

    #include <stdio.h>

    struct node

    { int data;

    struct node *next;

    };

    int min(struct node *first)/*指针first为链表头指针*/

    { strct node *p; int m;

    p=first->next; m=p->data;p=p->next;

    for(;p!=NULL;p=_[20]_______)

    if(p->data<m) m=p->data;

    return m;

    }


    正确答案:

    p->next  

  • 第10题:

    设某带头结头的单链表的结点结构说明如下:typedef struct nodel{int data struct nodel*next;}node;试设计一个算法:void copy(node*headl,node*head2),将以head1为头指针的单链表复制到一个不带有头结点且以head2为头指针的单链表中。


    正确答案: 一边遍历,一边申请新结点,链接到head2序列中。

  • 第11题:

    问答题
    下列给定程序是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数fun()的功能是:将单向链表结点(不包括头结点)数据域为偶数的值累加起来,并作为函数值返回。  请改正函数fun中的错误,使它能得出正确的结果。  注意:部分源程序在文件MODII.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!  试题程序:#include #include #include typedef struct aa{ int data; struct aa *next;}NODE;int fun(NODE *h){ int sum=0; NODE *p; p=h->next; /*********found*********/ while(p->next) {  if(p->data%2==0)   sum+=p->data;  /*********found*********/  p=h->next; } return sum;}NODE *creatlink(int n){ NODE *h,*p,*s; int i; h=p=(NODE *)malloc(sizeof(NODE)); for(i=1;idata=rand()%16;  s->next=p->next;  p->next=s;  p=p->next; } p->next=NULL; return h;}outlink(NODE *h){ NODE *p; p=h->next; printf("The LIST: HEAD"); while(p) {  printf("->%d",p->data);  p=p->next; } printf("");}main(){ NODE *head; int sum; system("CLS"); head=creatlink(10); outlink(head); sum=fun(head); printf("SUM=%d",sum);}

    正确答案:

    (1)错误:while(p->next)
    正确:while(p)或while(p!=NULL)
    (2)错误:p=h->next;
    正确:p= p ->next;
    解析:

      错误1:执行p=p->next后,p指针已经指向链表第一个包含数据域的结点。fun函数的while循环判断当前指针p指向的结点是否存在,若存在则对该结点数据域进行判断操作,而不是判断p指针的指针域是否为空。
      错误2:fun函数的while循环中判断结束后指针指向下一个结点,操作为p=p->next。

  • 第12题:

    填空题
    设线性链表的存储结构如下: struct node {ELEMTP data; /*数据域*/ struct node *next; /*指针域*/ } 试完成下列建立单链表的算法。 creat() {char var; head=(struct node *)malloc(sizeof(struct node)); head->next= () ; while((var=getchar())!=‘/n’){ ptr=( struct node *)malloc(sizeof(struct node)); ptr->data= var ;ptr->next=head->next; head->next= ptr ; } }

    正确答案: NULL
    解析: 暂无解析

  • 第13题:

    在C语言中,可以用typedef声明新的类型名来代替已有的类型名,比如有学生链表结点: typedef struct node{ int data; struct node * link; }NODE, * LinkList; 下述说法正确的是______。

    A.NODE是结构体struct node的别名

    B.* LinkList也是结构体struct node的别名

    C.LinkList也是结构体struct node的别名

    D.LinkList等价于node*


    正确答案:A
    解析:其实题中的定义相当于下述两个定义:typedefstructnode{intdata;structnode*link;}NODE;typedefstructnode{intdata;structnode*link;)*LinkList;前者给structnode取了个新名字NODE,即structnode和NODE是等价的;后者把structnode*命名为LinkList。

  • 第14题:

    阅读以下说明和C语言函数,将应填入(n)处的字句写在对应栏内。

    【说明】

    函数sort (NODE *head)的功能是;用冒泡排序法对单链表中的元素进行非递减排序。对于两个相邻结点中的元素,若较小的元素在前面,则交换这两个结点中的元素值。其中,head指向链表的头结点。排序时,为了避免每趟都扫描到链表的尾结点,设置一个指针endptr,使其指向下趟扫描需要到达的最后一个结点。例如,对于图4-1(a)的链表进行一趟冒泡排序后,得到图4-1(b)所示的链表。

    链表的结点类型定义如下:

    typedef struct Node {

    int data;

    struct Node *next;

    } NODE;

    【C语言函数】

    void sort (NODE *head)

    { NODE *ptr,*preptr, *endptr;

    int tempdata;

    ptr = head -> next;

    while ((1)) /*查找表尾结点*/

    ptr = ptr -> next;

    endptr = ptr; /*令endptr指向表尾结点*/

    ptr =(2);

    while(ptr != endptr) {

    while((3)) {

    if (ptr->data > ptr->next->data){

    tempdata = ptr->data; /*交换相邻结点的数据*/

    ptr->data = ptr->next->data;

    ptr->next->data = tempdata;

    }

    preptr =(4); ptr = ptr -> next;

    }

    endptr =(5); ptr = head->next;

    }

    }


    正确答案:(1)ptr -> next (2)head->next (3)ptr !=endptr或其等价形式 (4)ptr (5)preptr
    (1)ptr -> next (2)head->next (3)ptr !=endptr,或其等价形式 (4)ptr (5)preptr 解析:本题考查链表运算能力。
    从题目中的以下代码可知,ptr最后应指向表尾结点。
    ptr = head -> next;
    while((1))/*查找表尾结点*/
    ptr = ptr -> next;
    endptr = ptr; /*令endptr指向表尾结点*/
    显然,空(1)处应填入“ptr->next”,这样循环结束时,ptr指向表尾结点。若填入“ptr”,则循环结束时,ptr为空指针。
    进行冒泡排序时,从头至尾依次比较逻辑上相邻的两个结点的数据,如果小元素在前大元素在后,则交换。这样,经过一趟扫描,就将最大元素交换到了表的最后。下一趟可将次大元素交换到最大元素之前。显然,空(2)处应填入“head->next”。
    由于程序设置的endptr用于指示出每趟扫描需到达的最后一个结点,ptr用于依次扫描链表中的结点,因此空(3)处的循环条件为“ptr != endptr”。
    显然,指针preptr起的作用是指向ptr的前驱结点,因此,ptr每向后修改一次,相应地preptr就要修改一次,空(4)处应填入“ptr”。本趟循环结束后,下一趟扫描也就确定了,因此在空(5)处填入“preptr”。

  • 第15题:

    以下程序把三个NODEIYPE型的变量链接成—个简单的链表,并在while循环中输出链表结点数据域中的数据。请填空。

    include<stdio.h>

    struct node

    { int data;struct node*next;);

    typedef struct node NODETYPE;

    main()

    { NODETYPEa,b,c,*h,*p;

    a.data=10;b.data=20;c.data=30;h=&a;

    anext=&b;b.next=&c;c,next='\0';

    p=h;

    while(p){printf("%d,",p->data):【 】;}

    printf("\n");

    }


    正确答案:P++
    P++ 解析:本题主要考查的是将NODETYPE型的变量链接成—个简单的链表,利用typedef把NODETYPE变成struct node的别名,当执行while循环时,首先判断是否到了最后—个链表结点,如果没有则引用结构体中的成员data,然后指向下—个链表结点,继续判断,因此,此处应填的是p++指向下—个链表结点。

  • 第16题:

    阅读以下说明和C语言函数,将应填入(n)。

    【说明】

    已知包含头结点(不存储元素)的单链表的元素已经按照非递减方式排序,函数 compress(NODE*head)的功能是去掉其中重复的元素,使得链表中的元素互不相同。

    处理过程中,当元素重复出现时,保留元素第一次出现所在的结点。

    图2-1(a)、(b)是经函数compress()处理前后的链表结构示例图。

    链表的结点类型定义如下:

    typedef struct Node{

    int data;

    struct Node *next;

    }NODE;

    【C语言函数】

    void compress(NODE *head)

    { NODE *ptr,*q;

    ptr= (1); /*取得第一个元素结点的指针*/

    while( (2)&& ptr->next) {

    q=ptr->next;

    while(q&&(3)) { /*处理重复元素*/

    (4)q->next;

    free(q);

    q=ptr->next;

    }

    (5) ptr->next;

    }/*end of while */

    }/*end of compress*/


    正确答案:(1)head->next (2)ptr (3)q->data == ptr->data 或ptr->next->data==ptr->data或其等价表示 (4)ptr->next (5)ptr
    (1)head->next (2)ptr (3)q->data == ptr->data 或ptr->next->data==ptr->data,或其等价表示 (4)ptr->next (5)ptr 解析:本题考查基本程序设计能力。
    链表上的查找、插入和删除运算是常见的考点。本题要求去掉链表中的重复元素,使得链表中的元素互不相同,显然是对链表进行查找和删除操作。
    对于元素已经按照非递减方式排序的单链表,删除其中重复的元素,可以采用两种思路。
    1.顺序地遍历链表,对于逻辑上相邻的两个元素,比较它们是否相同,若相同,则删除后一个元素的结点,直到表尾。代码如下:
    ptr=head->next;/*取得第一个元素结点的指针*/
    while(ptr && ptr->next){ /*指针ptr指示出重复序列的第一个元素结点*/
    q=ptr->next;
    while(q && ptr->data==q->data){/*处理重复元素*/
    ptr->next=q->next;/*将结点从链表中删除*/
    free(q);
    q=ptr->next; /*继续扫描后继元素*/
    }
    ptr=ptr->next;
    }
    2.对于每一组重复元素,先找到其中的第一个结点,然后向后查找,直到出现一个相异元素时为止,此时保留重复元素的第一个结点,其余结点则从链表中删除。
    ptr=head->next;/*取得第一个元素结点的指针*/
    while(ptr && ptr->next){/*指针ptr指示出重复序列的第一个元素结点*/
    q=ptr->next;
    while(q && ptr->data==q->data) /*查找重复元素*/
    q=q->next;
    s=ptr->next; /*需要删除的第一个结点*/
    ptr->next=q; /*保留重复序列的第一个结点,将其余结点从链表中删除*/
    while(s && s!=q}{/*逐个释放被删除结点的空间*/
    t = s->next;free(s);s = t;
    }
    ptr=ptr->next;
    }
    题目中采用的是第一种思路。

  • 第17题:

    以下程序中函数fun的功能是:构成—个如图所示的带头结点的单向链表,在结点的数据域中放入了具有两个字符的字符串。函数disp的功能是显示输出该单向链表中所有结点中的字符串。请填空完成函数disp。

    include<stdio.h>

    typedef struct node /*链表结点结构*/

    { char sub[3];

    struct node *next;

    }Node;

    Node fun(char s) /* 建立链表*/

    { ...... }

    void disp(Node *h)

    { Node *p;

    p=h->next;

    while([ ])

    {printf("%s\n",p->sub);p=[ ];}

    }

    main()

    { Node *hd;

    hd=fun(); disp(hd);printf("\n");

    }


    正确答案:p!=NULL 或 p 或 p!=0 或 p!='0' p->next 或 (*P).next
    p!=NULL 或 p 或 p!=0 或 p!='0' p->next 或 (*P).next 解析:此题主要考核的是用指针处理链表。自定义结构体类型名为Node,并定义一个指向结点类型的指针next。用Node来定义头结点指针变量h,并定义另—个指针变量p指向了第—个结点,在满足p未指向最后—个结点的空指针时,输出p所指向结点的字符串,所以第—个空填p!=NULL或p或p!=0或p!='\0',然后将p指向下一个非空结点,所以第二个空填p->next或与其等效的形式,反复执行直到所有的结点都输出,即遇到p的值为NULL。

  • 第18题:

    有以下结构说明和变量定义,指针p、q、r分别指向链表中的3个连续结点。 struct node { int data;struct node*next;)*p,*q,*r; 现要将q所指结点从链表中删除,同时要保持链表的连续,以下不能按要求完成操作的语句是( )。

    A.p->next=q->next;

    B.P-next=P->next->next;

    C.p->next=r;

    D.p=q->next;


    正确答案:D
    本题考查链表结点的删除,q一>next中存放的是r所指结点的首地址,将r所指结点的首地址存于p--next中,则实现删除q所指点的功能,并保持链表连续,P所指点与r所指结点相连。

  • 第19题:

    以下程序的功能是:建立一个带有头结点的单向链表,并将存储在数组中的字符依次转存到链表的各个结点中,请填空。 #include <stdlib.h> stuct node { char data; struet node * next; }; stntct node * CreatList(char * s) { struet node *h,*p,*q; h = (struct node * ) malloc(sizeof(struct node) ); p=q=h; while( * s! ='\0') { p = (struct node *) malloc ( sizeof(struct node) ); p - > data = ( ) q- >next=p; q=p; a++; p- > next ='\0'; return h; } main( ) { char str[ ]= "link list"; struet node * head; head = CreatList(str);

    A.*s

    B.s

    C.*s++

    D.(*s)++


    正确答案:A
    解析:本题要求建立一个stmctnode类型的数据链表,函数CreatList将字符串"linklist"的首地址传给指针变量s,可以推断建立的链表一定与"linklist",有关,由CreatList(char*s)函数中所定义的变量及其他语句可知,h,p,q用于建立的链表,h表示头指针,p用于记录开辟的新结点,而q用作将新结点与已建立的链表相连的中间变量,所建立链表各个结点的data依次存放的是”linklist",中的各个字符,所以应填空*s。

  • 第20题:

    试题四(共 15 分)

    阅读以下说明和 C 语言函数,将应填入 (n) 处的字句写在答题纸的对应栏内。

    [说明]

    已知包含头结点(不存储元素)的单链表的元素已经按照非递减方式排序,函数compress(NODE *head)的功能是去掉其中重复的元素,使得链表中的元素互不相同。

    处理过程中,当元素重复出现时,保留元素第一次出现所在的结点。

    图4-1(a)、(b)是经函数 compress()处理前后的链表结构示例图。

    链表的结点类型定义如下:

    typedef struct Node {

    int data;

    struct Node *next;

    }NODE;

    [C 语言函数]

    void compress(NODE *head)

    { NODE *ptr,*q;

    ptr = (1) ; /* 取得第一个元素结点的指针 */

    while ( (2) && ptr -> next) {

    q = ptr -> next;

    while(q && (3) ) { /* 处理重复元素 */

    (4) = q -> next;

    free(q);

    q = ptr -> next;

    }

    (5) = ptr -> next;

    }/* end of while */

    }/* end of compress */


    正确答案:

  • 第21题:

    设线性链表的存储结构如下: struct node {ELEMTP data; /*数据域*/ struct node *next; /*指针域*/ } 试完成下列建立单链表的算法。 creat() {char var; head=(struct node *)malloc(sizeof(struct node)); head->next= () ; while((var=getchar())!=‘/n’){ ptr=( struct node *)malloc(sizeof(struct node)); ptr->data= var ;ptr->next=head->next; head->next= ptr ; } }


    正确答案:NULL

  • 第22题:

    设线性链表的存储结构如下: struct node {ELEMTP data; /*数据域*/ struct node *next; /*指针域*/ } 试完成下列在链表中值为x的结点前插入一个值为y的新结点。如果x值不存在,则把新结点插在表尾的算法。 void inserty(struct node *head,ELEMTP x,ELEMTP y) {s=(struct node *)malloc(sizeof(struct node)); (); if(){s->nexr=head;head=s;} else { q=head;p=q->next; while(p->dqta!=x&&p->next!=NULL){q=p;()} if(p->data= = x){q->next=s;s->next=p;} else{p->next=s;s->next=NULL;} } }


    正确答案:s->data=y;head->data= =x;p=p->next

  • 第23题:

    填空题
    设线性链表的存储结构如下: struct node {ELEMTP data; /*数据域*/ struct node *next; /*指针域*/ } 试完成下列在链表中值为x的结点前插入一个值为y的新结点。如果x值不存在,则把新结点插在表尾的算法。 void inserty(struct node *head,ELEMTP x,ELEMTP y) {s=(struct node *)malloc(sizeof(struct node)); (); if(){s->nexr=head;head=s;} else { q=head;p=q->next; while(p->dqta!=x&&p->next!=NULL){q=p;()} if(p->data= = x){q->next=s;s->next=p;} else{p->next=s;s->next=NULL;} } }

    正确答案: s->data=y,head->data= =x,p=p->next
    解析: 暂无解析