1, 首先应该创建一个链表
typedef struct Linklist //创建一个结构体取名为LinkList
{
DataType data;//一个节点的数据域
struct Linklist* next;//指向下一个节点的指针
}List, *pList,//取了别名为List,和一个结构体指针pList
2,创建结束后,应该初始化链表
(1)初始化链表
void InitLinkList(pList* pplist)//传入的参数为链表首节点的地址
{
assert(pplist);//断言,这个地址为空,说明链表不存在
*pplist = NULL;//把链表的首节点置空
}//完成初始化
3,插入数据,头插法和尾插法
(1)尾插法——————就是在链表中最后一个节点后插入一个数据
void Pushback(pList* pplist, int data)//需要改变链表的结构,传入链表地址
{
pList pCur = *pplist;
pList pNewnode = BuyNode(data);//这是一个函数,创建一个数据为data的新节点
assert(pplist);//断言
if (*pplist == NULL)//判空,如果链表为空,就在首节点后面插入新节点
{
*pplist = pNewnode;
}
else//不为空,就循环遍历找最后一个节点,在最后一个节点后面插入新节点
{
while (pCur->next)
{
pCur = pCur->next;
}
pCur->next = pNewnode;
}//插入完成
}
(2)头插法——————就是在链表的头部插入一个数据
void Pushfront(pList *pplist, int data)//需要改变链表的结构,传入链表地址
{
pNode pNewnode = Buynode(data);//插入过程中都需要创建新节点
assert(pplist);//断言
pNewnode->next = *pplist;//新节点的指针域指向首节点
*pplist = pNewnode;//首节点就变成了新创建的节点了
}
(3)创建新节点的函数
pList Buynode(int data)
{
pList pNewnode = (pList)malloc(sizeof(List));//开辟一块内存空间
assert(pNewnode);//对刚开辟的内存空间判空,
//开辟成功后对新节点赋值
pNewnode->data = data;
pNewnode->next = NULL;
//返回新节点
return pNewnode;
}
4,删除数据,头删法和尾删法
(1)尾删法————————删除链表的最后一个节点
void Popback(pList *pplist)//要改变链表的结构,传入链表的地址
{
pList pCur = *pplist;
pList pPer = NULL;
assert(pplist);//断言
if ((*pplist) == NULL)//判空,链表为空就不能插入
printf("链表为空,无法删除!!!\n");
else
{//链表不为空,就循环找到最后一个节点然后删除
while (pCur->next)
{
pPer = pCur;
pCur = pCur->next;
}
pPer->next = NULL;//把最后一个节点的指针域置空
free(pCur);//因为每一个节点都是malloc申请出来的,最后必须free
pCur = NULL;
}
}
(2) 头删法————————删除链表的第一个节点
void Popfront(pList *pplist)//要改变链表的结构,传入链表的地址
{
pList pCur = *pplist;
assert(pplist);
if (*pplist == NULL)//判空,链表为空就不能插入
{
printf("链表为空,无法删除!!!\n");
}
else//不为空就从头部删除
{
*pplist = pCur->next;
pCur->next = NULL;
free(pCur);
pCur = NULL;
}
}