例:在2之前插入15
#include<stdio.h>
#include<stdlib.h>
void ScanfList();
//节点结构体
struct Node
{
int a;
struct Node* pNext;
};
//链表头尾指针
struct Node* g_pHead = NULL;
struct Node* g_pEnd = NULL;
//创建链表,在链表中增加一个数据 头添加
void AddListHead(int a);
//遍历链表
void ScanfList();
//查询链表指定节点
struct Node* SelectNode(int a) ;
//清空链表
void FreeList();
//指定位置插入节点
void AddListRand(int index,int a);
int main(void)
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
g_pHead;
int i=0;
for(i=0;i<10;i++)
{
AddListHead(a[i]);
}
ScanfList();
AddListRand(2,15);
ScanfList();
//释放链表
FreeList();
system("pause");
return 0;
}
//指定位置插入节点
void AddListRand(int index,int a)
{
if(NULL==g_pHead)
{
printf ("链表没有节点\n");
return;
}
//找位置
struct Node* pt = SelectNode(index);
if(NULL == pt)
{
printf("没有指定节点");
return;
}
//有此节点
//
struct Node* pTemp = (struct Node*)malloc(sizeof(struct Node));
pTemp->a = a;
pTemp->pNext = NULL;
//链接到链表上
if(pt == g_pEnd)//节点正好是尾巴
{
g_pEnd->pNext = pTemp;
g_pEnd = pTemp;
}
else
{
pTemp->pNext = pt->pNext;
pt->pNext = pTemp;
}
}
//清空链表
void FreeList()
{
struct Node *pTemp = g_pHead;
while(pTemp!=NULL)
{
struct Node* pt = pTemp;
pTemp = pTemp->pNext;
free(pt);
}
//头尾清空
g_pHead = NULL;
g_pEnd = NULL;
}
//查询链表指定节点
struct Node* SelectNode(int a)
{
struct Node *pTemp = g_pHead;
while(pTemp!=NULL)
{
if(a == pTemp->a)
{
return pTemp;
}
pTemp = pTemp->pNext;
}
//没找到
return NULL;
}
//遍历链表
void ScanfList()
{
struct Node *pTemp = g_pHead;
while(pTemp!=NULL)
{
printf("%d ",pTemp->a);
pTemp = pTemp->pNext;
}
printf("\n");
}
//创建链表,在链表中增加一个数据 头添加
void AddListHead(int a)
{
//创建一个节点
struct Node* pTemp = (struct Node*)malloc(sizeof(struct Node));
//节点数据赋值
pTemp->a = a;
pTemp->pNext = NULL;
//接在链表上
if(NULL == g_pHead)
{
//链表为空,新节点既是头又是尾巴
g_pHead = pTemp;
g_pEnd = pTemp;
}
else
{
//新节点的下一个指向头
pTemp->pNext = g_pHead;
//新节点就是头了
g_pHead = pTemp;
}
}