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