1、顺序表,假设元素已按升序排序
/*
* remove redundant elements from ordered sequence
*/
int remove_redundant_elem( int c[], int n )
{
int i = 0, j = 1;
while( j < n )
{
if( c[i] != c[j] )
c[++i] = c[j];
++j;
}
return i + 1;
}
2、单链表,假设元素已按升序排序
void remove_redundant_elem_llist( link_list * lst )
{
node_ptr h = *lst, r = NULL, p = NULL;
assert( h != NULL );
r = h->next;
if( r != NULL )
p = r->next;
while( p != NULL )
{
if( p->data != r->data )
r = p;
else
{
r->next = p->next;
free( p );
}
p = r->next;
}
}

本文提供两种方法去除已升序排列序列中的重复元素:一种针对顺序表,通过一次遍历保留唯一元素;另一种适用于单链表,同样采用单次遍历移除重复节点。
710

被折叠的 条评论
为什么被折叠?



