删除链表中数据域相同的其他结点
题目
已知线性链表的第一个结点的指针为list,请写一个算法,删除数据域值相同的结点,即若链表中有多个结点具有相同的数据域值,只保留一个结点,其余结点从链表中删除,使得到的链表中所有的结点的数据域值都不相同。
分析
假设指针P指向新的数据结点,指针每移动一位,都要检测是否在前面出现过,检测每次q指针都从初始位置检测,这样时间复杂度O(n^2).
例如
原来链表的数据:{1,2,2,4,2,6}
删除之后数据为 :{1,2,4,6}
代码1
// 删除链表中数据域相同的其他结点
void DELETE3(LinkList list){
LinkList p,q,r;
p=list;
r=p;
p=p->link;
int flag=0;
while (p!=NULL){
q=list;
while (q!=p){
if (q->data!=p->data){
q=q->link;
}else{
flag=1;
break;
}// if
}// while
if (flag==1){
r->link=p->link;