Description
已知线性表中的元素以递增有序排列,并以单链表作存储结构。试写一个高效的算法,删除表中所有冗余的结点,即数据域相同的结点只保留一个。
例如对链表:
进行操作,将得到:
链表结点定义如下:
struct LinkNode {
int data;
LinkNode *next;
LinkNode(int d, LinkNode *add_on = NULL) {
data = d;
next = add_on;
}
};
typedef LinkNode *LinkList;
请实现函数:
void delete_duplicate(LinkList &head);
注意内存的回收。
Hint
只需提交delete_duplicate()
函数
Problem Source: SYSU ACM/ICPC Team
zhc:
//删除重复节点
/*由于原while循环里的p!=NULL 只在head==NULL时有用,故前两行可换成以下代码,
行数+1,while比较次数每次-1,so nice!
if(head==NULL || head->next ==NULL) return ;
LinkList p = head ;
while(p->next!=NULL){
/*
void delete_duplicate(LinkList &head){
LinkList p = head;
while(p!=NULL&& p->next!=NULL){
if(p->data == p->next->data){
LinkList temp = p->next;
p->next = temp->next ;
delete temp ;
}
else p=p->next ;
}
}
Yizuodi的答案
void delete_duplicate(LinkList &head){
LinkList p = head;
while(p!=NULL&& p->next!=NULL){
if(p->data == p->next->data){
LinkList temp = p->next;
p->next = temp->next ;
delete temp ;
}
else p=p->next ;
}
}