双向链表的插入操作的相关操作
1.头部插入
/*****************************************************************************
* 函数名称: HeadAdd
* 函数功能:双向链表的头部插入
* 函数参数:
* @a:*Head
* 操作的链表
* @b:data
* 添加的数据
* 返回结果: 布尔型
* 注意事项:none
* 函数作者:c7355608@163.com
* 创建日期:2024/4/23
* 修改历史:2024/4/23
* 函数版本:1.0
*
*****************************************************************************/
bool HeadAdd(DoubleLList_t *Head,DataType_t data)
{
DoubleLList_t *New = DoubleLList_NewNode( data);
//对New进行错误判断
if (NULL == New)
{
printf("can not insert new node\n");
return false;
}
//判断链表是否为空
if( NULL == Head->next){
Head->next = New;
return true;
}
//如果链表为非空,则把新结点插入到链表的头部
New->next = Head->next;
Head->next->prev = New;
Head->next = New;
return true;
}
2.尾部插入
/*****************************************************************************
* 函数名称: HeadAdd
* 函数功能:双向链表的尾部插入
* 函数参数:
* @a:*Head
* 操作的链表
* @b:data
* 添加的数据
* 返回结果: 布尔型
* 注意事项:none
* 函数作者:c7355608@163.com
* 创建日期:2024/4/23
* 修改历史:2024/4/23
* 函数版本:1.0
*
*****************************************************************************/
bool EndAdd(DoubleLList_t *Head,DataType_t data)
{
DoubleLList_t *New = DoubleLList_NewNode( data);
DoubleLList_t *Phead = Head;
//1.对New进行错误判断
if (NULL == New)
{
printf("can not insert new node\n");
return false;
}
//2.判断链表是否为空
if( NULL == Head->next){
Head->next = New;
return true;
}
//3.如果链表为非空,则把新结点插入到链表的尾部
//遍历链表
while(Phead->next){
//把头的直接后继作为新的头结点
Phead = Phead->next;
}
//插入
Phead->next = New;
New->prev = Phead;
return true;
}
3.中间插入
/*****************************************************************************
* 函数名称: HeadAdd
* 函数功能:双向链表的中间插入
* 函数参数:
* @a:*Head
* 操作的链表
* @b:data
* 添加的数据
* @c:location
* 要删除的位置
* 返回结果: 布尔型
* 注意事项:要注意当插入为最后一个时,操作要注意是否越界,避免段错误
* 函数作者:c7355608@163.com
* 创建日期:2024/4/23
* 修改历史:2024/4/23
* 函数版本:1.0
*
*****************************************************************************/
bool InsertAdd(DoubleLList_t *Head,DataType_t data,int location)
{
DoubleLList_t *New = DoubleLList_NewNode( data);
DoubleLList_t *Phead = Head;
int cnt = 0; //记录遍历的位置
//1.对New进行错误判断
if (NULL == New)
{
printf("can not insert new node\n");
return false;
}
//2.判断链表是否为空
if( NULL == Head->next){
Head->next = New;
return true;
}
//3.遍历链表
while(Phead->next){
//判断是否遍历到想要插入的位置
if(cnt++ == location){
break;
}
//把头的直接后继作为新的头结点
Phead = Phead->next;
}
//4.刚刚好插入在最后一个
//cnt 刚好记录了链表里有多少个元素
if(cnt == location){
Phead->next = New;
New->prev = Phead;
return true;
}
//输入的值超过了链表的长度
if(cnt < location){
printf("插入的位置超出链表范围\n");
return false;
}
//5.插入在找到位置的后面
New->next = Phead->next;
Phead->next->prev = New ;
New->prev = Phead;
Phead->next = New;
return 0;
}
标签:Head,return,next,链表,add,Phead,New,doublelist
From: https://www.cnblogs.com/waibibabu-/p/18153838