class node
{
public:
node(int x) : data(x), next(0){}
int data
node* next
}
void DelNode(node* pDel)
{
node* pTemp = pDel->next
memcpy(pDel, pTemp, sizeof(node))
pDel->next = pTemp->next
delete pTemp
}
一:允许打乱顺序1) 排序
2)删除
二:不允许打乱顺序。
每次从第一个数据节点开始,从该节点后查找相同数据的节点,找到删除之。
Node *p,*q,*s
if(head==NULL || head->next==NULL)return
q=p=head->next
//单链表删除节点,必须持有前一个节点,否则无法删除。
while(p->next)//查找和节点p重复的节点,重复则删除。
{
q=p
s=q->next
while(s ){
if(s->data ==p->data){//重复判断,重复,要删除
q->next=s->next//从链表里删除
free(s)//实际删除节点,释放内存
s=q->next //保持s=q->next
}else {
//不重复,准备判断下一个节点,节点向链表后面移动。
q=s
s=s->next
}
}
if(p->next)
//
删除后,有可能链表,后面所有节点都删除了,所以要判断一下。
p=p->next//
节点后移,准备判断下一个数据节点,有没有重复节点。
}