链表的插入分为头插入,中间插入和尾插入。
具体方法如下:
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int s;
struct node* pnext;
}list;
list* addnode(list** pphead, list** ppend, int n)
{
list* ptemp = malloc(sizeof(list));
ptemp->s = n;
ptemp->pnext = NULL;
if (NULL == *pphead)
{
*pphead = ptemp;
*ppend = ptemp;
}
else
{
(*ppend)->pnext = ptemp;
*ppend = ptemp;
}
}
void insertnode(list** pphead, list** ppend, list* pnode, int val)
{
//头插入
//新来节点的下一个指向头节点
//头指针指向新来的节点(新来的节点成为新的头节点)
if ((*pphead)->s == val)
{
pnode->pnext = *pphead;
*pphead = pnode;
return;
}
//中间插入
//遍历链表
//找到插入位置的前一个结点
//新来结点的下一个指向标记的下一个
//标记的下一个指向新来的节点
list* pmark = *pphead;
while (pmark->pnext!= NULL)
{
if (pmark->pnext->s == val)
{
pnode->pnext = pmark->pnext;
pmark->pnext = pnode;
return;
}
pmark = pmark->pnext;
}
//尾插入
//尾节点的下一个指向新来的节点
//尾指针指向新来的节点(新来的节点成为新的尾节点)
(*ppend)->pnext = pnode;
*ppend = pnode;
}
int main()
{
list* phead = NULL;//定义头指针
list* pend = NULL; //定义尾指针
//先添加几个节点
addnode(&phead, &pend, 1);
addnode(&phead, &pend, 2);
addnode(&phead, &pend, 3);
addnode(&phead, &pend, 4);
//创建一个节点
list* ptep = malloc(sizeof(list));
ptep->s = 7;
ptep->pnext = NULL;
//将创建的节点插入
insertnode(&phead, &pend, ptep, 5);
//遍历链表,检验是否成功插入
while (phead != NULL)
{
printf("%d\n", phead->s);
phead = phead->pnext;
}
return 0;
}