问题 填空题

[说明]

已知包含头节点(不存储元素)的单链表的元素已经按照非递减方式排序,函数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*/

(5)填()

答案

参考答案: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*/

选择题
单项选择题