1.初始化链表
struct LinkNode * init_LinkList()
{
struct LinkNode *pHeader = (LinkNode*) malloc(sizeof(struct LinkNode));
if(pHeader == NULL)
{
return NULL;
}
pHeader->num = 1 ; //头节点不维护数据域
pHeader->next = NULL; //头节点初始化指针域为NULL
//创建一个尾节点。利用后期添加新的数据
struct LinkNode *pTail = pHeader ;
int val = -1;
while(1)
{
printf("请插入数据-1代表输入结束\n");
scanf("%d",&val);
if(val == -1)
{
break;
}
//创建新节点
struct LinkNode *newNode = (LinkNode*) malloc(sizeof(struct LinkNode));
newNode->num = val;
newNode->next = NULL;
//建立关系
pTail->next = newNode;
//更新新的尾节点
pTail = newNode;
}
return pHeader;
}
2.遍历链表
void foreach_LinkList(struct LinkNode * pHeader)
{
if(pHeader == NULL)
{
return;
}
//pCurrent起始指向的是第一个真实数据的节点
struct LinkNode * pCurrent = pHeader->next;
while(pCurrent != NULL)
{
printf("%d\r\n",pCurrent->num);
pCurrent=pCurrent->next;
}
}
3.插入链表
void insert_LinkList(struct LinkNode * pHeader ,int oldVal,int newVal)
{
if(pHeader == NULL)
{
return ;
}
//创建两个辅助指针变量
struct LinkNode * pPrev = pHeader;
struct LinkNode * pCurrent = pHeader->next;
while(pCurrent != NULL)
{
if(pCurrent->num == oldVal)
{
break;
}
//如果没有找到位置,让辅助指针后移
pPrev = pCurrent;
pCurrent = pCurrent->next;
}
//创建新节点
struct LinkNode *newNode = (LinkNode*) malloc(sizeof(struct LinkNode));
newNode->num = newVal;
newNode->next= NULL;
//建立关系
newNode->next = pCurrent;
pPrev->next = newNode;
}
4.删除链表
void delete_LinkList(struct LinkNode * pHeader , int Val)
{
if(pHeader == NULL)
{
return ;
}
//创建两个辅助指针变量
struct LinkNode * pPrev = pHeader;
struct LinkNode * pCurrent = pHeader->next;
while(pCurrent != NULL)
{
if(pCurrent->num == Val)
{
break;
}
//如果没有找到位置,让辅助指针后移
pPrev = pCurrent;
pCurrent = pCurrent->next;
}
//无效数据,就直接return
if(pCurrent == NULL)
{
return;
}
//建立关系,更改指针指向
pPrev->next = pCurrent->next;
//删除节点
free(pCurrent);
pCurrent = NULL;
}
5.反转链表
void reverse_LinkList(struct LinkNode * pHeader)
{
if(pHeader = NULL)
{
return;
}
struct LinkNode * pPrve = NULL;
struct LinkNode * pCurrent = pHeader->next;
struct LinkNode * pNext = NULL;
while(pCurrent!= NULL)
{
pNext = pCurrent->next;
pCurrent->next = pPrve;
pPrve = pCurrent;
pCurrent = pNext;
}
}