单链表的定义和基本操作(二)
next =pHead->next;
pHead->next = node;
return rv;
}
PNODE Get_Prior(PHEAD pHead,PNODE node)
{
if(pHead == NULL || node == NULL)
{
return NULL;
}
PNODE p = pHead;
while(p->next != node && p->next != NULL)
{
p = p->next;
}
if(p->next == NULL)
{
return NULL;
}
return p;
}
int Delete(PHEAD pHead,ElemType e)
{
int rv = 0;
if(NULL == pHead)
{
rv = -2;
return rv;
}
while (pHead->next->data !=e && pHead->next != NULL)
{
pHead = pHead->next;
}
if(NULL == pHead->next)
{
return rv;
}
else
{
PNODE tmp = pHead->next;
pHead->next = pHead->next->next;
free(tmp);
tmp = NULL;
}
return rv;
}
int Destory(PHEAD *pHead)
{
int rv = 0;
if(NULL == *pHead)
{
rv = -2;
return rv;
}
while (NULL != (*pHead)->next)
{
PNODE tmp = (*pHead)->next;
(*pHead)->next = (*pHead)->next->next;
free(tmp);
}
free((*pHead));
*pHead = NULL;
return rv;
}
void Reverse(PHEAD pHead)
{
if (!pHead || !pHead->next || !pHead->next->next)
{
return;
}
PNODE p1 =pHead->next;
PNODE p2 =p1->next;
PNODE p3;
p1->next = NULL;
while (p2)
{
p3 = p2->next;
p2->next = p1;
p1 = p2;
p2 = p3;
}
pHead->next = p1;
}
void Sort(PHEAD pHead)
{
if (!pHead || !pHead->next || !pHead->next->next)
{
return;
}
PNODE p1 =pHead->next->next;
PNODE p2;
while (p1)
{
p2 = Get_Prior(pHead,p1);
PNODE tmp = p1->next;
while (p2 != pHead && p2->data > p1->data)
{
if(p2->next == p1)
{
p2->next = tmp;
}
p2 = Get_Prior(pHead,p2);
}
if(p2->next != p1)
{
p1->next = p2->next;
p2->next = p1;
}
p1 = tmp;
}
}