单链表中重复元素的删除;单链表的就地逆置.(二)

2014-11-24 08:58:26 · 作者: · 浏览: 1
t;
p->next=q;
if(i==len+1) //表尾插入后修改尾指针
tail=q;
++len;
return true;
}
template
bool LinkList::Append(const T&e) //画图分析
{
LinkNode *q;
q=new LinkNode;
q->data=e;
tail->next=q;
tail=q; //漏了一句,要自己写,弄清原理
tail->next=NULL;
++len;
return true;
}
template
bool LinkList::Delete(T&e,int i)
{
if(i<1 || i>len)
return false;
LinkNode *p,*q;
int k=1;
p=head;
while(k {
p=p->next;
k++;
}
q=p->next;
p->next=q->next;
if(q==tail)
tail=q;
e=q->data;
delete q;
--len;
return true;
}
template
void LinkList::Traverse(void (*visit)(const T&e))const
{
LinkNode*p=head->next;
while(p)
{
visit(p->data);
p=p->next;
}

}
template
LinkList& LinkList::operator=(const LinkList&r)
{
Clear();
delete head;
CopyFrom(r);
return *this;
}
template
void LinkList::CopyFrom(const LinkList& r)
{
len=0;
head=tail=new LinkNode;
head->next=NULL;
LinkNode *p=r.head->next;
while(p)
{
Append(p->data);
p=p->next;
}
}
template
void LinkList::Delete()
{

LinkNode *r,*t,*y,*q;
for(r = head;r != NULL;r = r->next)
{
q = r;
for(t = r->next;t!=NULL;t = t->next)
{
if(r->data < t -> data)
break;

if(r->data == t -> data)
{
q ->next = t->next;
}
else{
q = q ->next;
}

}

}
}
template
void LinkList::Reverse()
{
int temp;
LinkNode *p = head->next,*q = head;
for(int i =0 ;i < len/2;i++)
{

for(int j = 0;j < len-i;j++)
{
q = q->next;

}
temp = q->data;
q->data = p -> data;
p->data = temp;
q = head;
p = p->next;
}
}