1.节点的插入、删除
核心:找到所需处理节点的上一个节点的位置。
int i = 1; //计数器
PNODE p = pHead->pNext;
while (NULL !=p && i < pos-1) //pos:所需处理节点的位置,pos-1:前一个节点的位置
{
p = p->pNext;
++i;
}
if (i > pos-1 || NULL == p)
return false;
时间一长,再写代码便会出现很多小错误,抓住核心便不会出错。
2. 清空与销毁链表的区别
清空
void clearList(PNODE pHead){
PNODE p;
while(NULL != pHead->pNext){
p = pHead->pNext; //保留头结点和头指针
pHead->pNext = p->pNext;
free(p);
}
}
销毁
void destoryList(PNODE pHead){
PNODE p ;
while(NULL != pHead){
p = pHead; //从头结点开始,毫不保留
pHead = pHead->pNext;
free(p);
}
}
3. 按值查找
查找值的地址(若能查找到,则返回其地址,否则返回NULL)
PNODE locateElement(PNODE pHead, int e){
PNODE p = pHead->pNext;
while(p && p->data != e){
p = p->pNext;
}
return p;
}
查找值的位置序号(若能查找到,则返回其位置序号,否则返回0)
int locateElement(PNODE pHead, int e){
int pos = 1;
PNODE p = pHead->pNext;
while(p && p->data != e){
p = p->pNext;
pos++;
}
if(p != NULL)
return pos;
else
return 0;
}