链表的查找:
SLTNode* SListFind(SLTNode* phead, SLTDateType x)
{
SLTNode* cur = phead;
while (cur)
{
if (cur->data == x)
{
return cur;
}
else
{
cur = cur->next;
}
}
return NULL;
}
思路很简单,从头遍历链表,比较每一个节点所存放的数据,是就返回,不是就让工作cur指针往后移一下。
因为查找并不改变链表,所以只要传一维指针就可以了。
打印链表:
//打印链表
void SListPrint(SLTNode* phead)
{
SLTNode* cur = phead;
while (cur != NULL)
{
printf("%d->", cur->data);
cur = cur->next;
}
printf("NULL\n");
}
打印链表的思路与查找类似,也是用工作指针cur进行链表遍历,并将每一个节点中的data打印出来。
与查找算法一样,打印不需要改变链表,所以只需要传一级指针即可。
销毁链表:
//销毁链表
void SListDestroy(SLTNode** pphead)
{
assert(pphead);
SLTNode* cur = *pphead;
while (cur)
{
SLTNode* next = cur->next;
free(cur);
cur = next;
}
*pphead = NULL;
}
运用工作指针cur遍历列表,并在遍历中将cur的下一个节点用next指针进行储存,然后释放cur所指向的指针,再将next赋值给cur,以此循环,最后再将头指针指向空,以防野指针的出现。