单链表定义如下:
typedef struct list
{
struct list *fwd;
int data;
} list;
根节点root不带数据,root->fwd指向首节点,为NULL表示链表为空。尾节点的fwd为NULL。
下面的例子中,数据不重复,升序排列。
插入:
int insert_list(list *root, int data)
{
list *pCur, *pNext, *pNode;
for (pCur = root; (pNext = pCur->fwd) != NULL; pCur = pNext)
{
if (pNext->data > data)
{
break;
}
}
pNode = malloc(sizeof(list));
if (NULL == pNode)
{
return -1;
}
pNode->data = data;
pNode->fwd = pNext;
pCur->fwd = pNode;
return 0;
}
删除:
int remove_list(list *root, int data)
{
list *pCur, *pNext;
for (pCur = root; (pNext = pCur->fwd) != NULL; pCur = pNext)
{
if (pNext->data == data)
{
break;
}
}
if (pNext)
{
pCur->fwd = pNext->fwd;
free(pNext);
}
return 0;
}
用法:
list root;
root.fwd = NULL;
root.data = -1;
...
insert_list(&root, n);
...
remove_list(&root, n);