单链表的定义和基本操作(二)

2014-11-24 03:05:42 · 作者: · 浏览: 2
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; } }