一个按元素值从小到大排列的单向链表,请编写算法删除表内元素值相同的链点(即只保留其中的一个)。
思路:首先定义出链点和链表;然后用两个指针指向相邻的两个元素,比较data域值的大小,若相等则删除后一个,不相等则两个指针同时向后移动一个元素,遍历链表。
实现:
typedef struct node_type
{
int data;
struct node_type * next;
}
node_type ;
typedef struct list_type
{
node_type *head;
int length;
}list_type;
int delete1(node *h)
{
node *p, *s, *t;
p=h;
s=h;
s=s->next;
while(p!=0||s!=0)
{
if(p->data==s->data)
{
t=s->next;
s->next=t->next;
free(t);
}
p=p->next;
s=s->next;
}
}