一个链表中所有元素通过指针串联起来,链表的插入、删除等操作都是对指针的操作。
使用指针操作链表
例如,下面的代码段实现了一个删除链表节点的函数,很多人都会采用类似的代码删除链表节点。/* 结构体定义 */
struct testdata
{
struct testdata * next; //指向链表下一个节点的指针
int id;
};
/* 链表头 */
struct testdata * td_head = NULL;
/* 删除id=tid的链表节点 */
int delete_from_list(int tid)
{
struct testdata * cursor = td_head;
struct testdata * prev;
while (cursor != NULL)
{
if (cursor->id == tid)
{
/* 如果待删除的节点是链表头 */
if (cursor == td_head)
{
td_head = cursor->next;
}
else /* 如果待删除的节点不是链表头 */
{
prev->next = cursor->next;
}
free(cursor);
return 0;
}
prev = cursor;
/* 遍历所有节点 */
cursor = cursor->next;
}
return -1;
}
在上述代码删除节点时,需要区分头结点和其他节点。同样的,如果是在链表末尾插入节点,也要考虑头结点和其他节点的情况。
使用二级指针操作链表<