数据结构笔试题——基于C语言的链表功能函数实现
题目1
题目要求如下:
/**
* @function name: LList_CntdmFind
* @brief 查找链表中,倒数第k个位置上的节点
* @param :
@Head:链表头节点
@k :倒数第k个位置
* @retval :int 型返回值;返回-1时即为失败,返回0时表示成功;
* @date :2024/04/23
* @version 1.0
* @note
* CopyRight (c) 2023-2024 [email protected] All Right Reseverd
*/
int LList_CntdmFind(LList_t *Head, int k)
{
LList_t *tmp1 = Head->next; // 用来遍历
int length = 0; // 用来存放元素个数
int i = 0;
if (NULL == Head) // 判断空表
return -1;
while (tmp1) // 计算元素个数
{
length++;
tmp1 = tmp1->next;
}
if (length < k) // 如果k太大
{
printf("The k is invalid\n");
return -1;
}
else if (length == k) // k正好是第一个
{
return Head->next->data;
}
else // 正常倒数
{
tmp1 = Head->next;
for (i = 0; i < length - k; i++)
{
tmp1 = tmp1->next;
}
return tmp1->data;
}
}
题目2
题目要求如下:
/**
* @function name: LList_DeleteMin
* @brief :删除单链表中的最小值节点
* @param :
@Head:链表头节点
* @retval :bool 型返回值;返回false时即为失败,返回true时表示成功;
* @date :2024/04/23
* @version 1.0
* @note
* CopyRight (c) 2023-2024 [email protected] All Right Reseverd
*/
bool LList_DeleteMin(LList_t *Head)
{
LList_t *tmp1 = Head->next; // 用来遍历
LList_t *tmpFormer = Head; // 用来存放目标指针前一个节点
LList_t *tmpDest = Head->next; // 用来存放目标指针
DataType_t tmpMin = tmp1->data; // 用来存放最小值
if (!tmp1) // 如果是空表
{
printf("The list is NULL");
return false;
}
if (!tmp1->next) // 只有一个元素,就删掉
{
free(Head->next);
Head = NULL;
return true;
}
while (tmp1->next) // 两个以上的元素,定位到最小元素
{
if (tmpMin > tmp1->next->data)
{
tmpMin = tmp1->next->data;
tmpDest = tmp1->next;
tmpFormer = tmp1;
}
tmp1 = tmp1->next;
}
tmpFormer->next = tmpDest->next; // 进行删除操作
tmpDest->next = NULL;
free(tmpDest);
return true;
}
热门相关:明天和意外 侯门弃女:妖孽丞相赖上门 福慧双全 明尊 嫁入豪门后我养崽盘大佬